var tracker_ua_base = (function () {
    var B = "Samsung", J = "Sharp", Q = "Sony Ericsson", F = "Motorola", R = "LG", K = "Huawei", A = "HTC",
        O = "Coolpad", N = "Asus", y = "Acer";
    var C = " based device";
    var x = {
        SAMSUNG: {
            "GT-S3370C": [B, "Corby 3G"],
            "GT-S3650": [B, "Corby"],
            "GT-S3653": [B, "Corby"],
            "GT-S3850": [B, "Corby II"],
            "GT-S5230": [B, "Star"],
            "GT-S5230W": [B, "Star"],
            "GT-S5233": [B, "Star"],
            "GT-S5260": [B, "Star II"],
            "GT-S5560": [B, "Marvel"],
            "GT-S5620": [B, "Monte"],
            "GT-S7550": [B, "Blue Earth"],
            "GT-S8000": [B, "Jet"],
            "GT-S8003": [B, "Jet"],
            "SGH-F480": [B, "Tocco"],
            "SGH-T528g": [B, "Straight Talk"],
            "GT-B3410": [B, "Star Qwerty"],
            "GT-B5310": [B, "Corby Pro"],
            "GT-B7722": [B, "Star Duos"],
            "GT-C6712": [B, "Star II Duos"]
        }
    };
    var P = {
        SAMSUNG: {
            "GT- S5250": [B, "Wave 525"],
            "GT-S5250": [B, "Wave 525"],
            "GT-S5253": [B, "Wave 525"],
            "GT-S5330": [B, "Wave 533"],
            "GT-S5380": [B, "Wave Y"],
            "GT-S5380D": [B, "Wave Y"],
            "GT-S5380K": [B, "Wave Y"],
            "GT-S5750E": [B, "Wave 575"],
            "GT-S5753E": [B, "Wave 575"],
            "GT-S7230B": [B, "Wave 723"],
            "GT-S7230E": [B, "Wave 723"],
            "GT-S7233E": [B, "Wave 723"],
            "GT-S7250": [B, "Wave M"],
            "GT-S7250D": [B, "Wave M"],
            "GT-S8500": [B, "Wave"],
            "GT-S8500C": [B, "Wave"],
            "GT-S8500R": [B, "Wave"],
            "GT-S8500T": [B, "Wave"],
            "GT-S8530": [B, "Wave II"],
            "GT-S8600": [B, "Wave 3"],
            "SHW-M410": [B, "Wave 3"]
        }
    };
    var G = {SAMSUNG: {"GT-I9500": [B, "GT-I9500"]}};
    var T = {"Coolpad D508": [O, "D508"], "Coolpad E600": [O, "E600"], "SCH-F839": [B, "SCH-F839"]};
    var z = {
        DX900: [y, "Tempo DX900"],
        F900: [y, "Tempo F900"],
        "Coolpad F800": [O, "F800"],
        "garmin-asus-Nuvifone-M10": ["Garmin-Asus", "Nuvifone M10"],
        "HP iPAQ 510": ["HP", "iPAQ 510"],
        "HD mini T5555": [A, "HD mini"],
        "HTC HD mini": [A, "HD mini"],
        "HTC HD mini T5555": [A, "HD mini"],
        "HTC HD2": [A, "HD2"],
        "HTC HD2 T8585": [A, "HD2"],
        "HD2 T8585": [A, "HD2"],
        "T-Mobile LEO": [A, "HD2"],
        dopodT5588: [A, "Hengshan"],
        "HTC Mega-T3333": [A, "Mega"],
        "HTC Snap S521": [A, "Snap"],
        "HTC Touch2 T3320": [A, "Touch 2"],
        "HTC Touch2 T3333": [A, "Touch 2"],
        "HTC Touch2 T3335": [A, "Touch 2"],
        "HTC P3700": [A, "Touch Diamond"],
        "HTC Touch Diamond2 T5353": [A, "Touch Diamond 2"],
        "HTC Touch HD T8282": [A, "Touch HD"],
        "HTC Touch HD T8283": [A, "Touch HD"],
        "HTC Touch HD2 T8585": [A, "Touch HD2"],
        "HTC Touch Pro2 T7373": [A, "Touch Pro 2"],
        T7380: [A, "Touch Pro 2"],
        "HTC TyTN II": [A, "TyTN II"],
        "GT-B7300": [B, "Omnia Lite"],
        "GT-B7610": [B, "Omnia Pro"],
        "GT-i8000": [B, "Omnia 2"],
        "GT-I8000": [B, "Omnia 2"],
        "GT-I8000U": [B, "Omnia 2"],
        M1i: [Q, "M1i Aspen"]
    };
    var D = {
        Acer: {Allegro: [y, "Allegro"], M310: [y, "Allegro"]},
        Asus: {Galaxy6: [N, "Galaxy 6"]},
        DELL: {"Venue Pro": ["Dell", "Venue Pro"]},
        FujitsuToshibaMobileCommun: {IS12T: ["Fujitsu Toshiba", "IS12T"]},
        HTC: {
            "7 Mozart": [A, "7 Mozart"],
            "7 Mozart T8698": [A, "7 Mozart"],
            T8697: [A, "7 Mozart"],
            T8698: [A, "7 Mozart"],
            PD67100: [A, "7 Mozart"],
            "Mozart T8698": [A, "7 Mozart"],
            Mozart: [A, "7 Mozart"],
            "USCCHTC-PC93100": [A, "Arrive"],
            Gold: [A, "Gold "],
            HD2: [A, "HD2"],
            HD7: [A, "HD7"],
            "HD7 T9292": [A, "HD7"],
            T9295: [A, "HD7"],
            T9296: [A, "HD7"],
            "HD7 Infinity": [A, "HD7"],
            T7575: [A, "7 Pro"],
            "7 Pro T7576": [A, "7 Pro"],
            mwp6985: [A, "Trophy"],
            "7 Trophy T8686": [A, "Trophy"],
            "7 Trophy": [A, "Trophy"],
            PC40100: [A, "Trophy"],
            "Touch-IT Trophy": [A, "Trophy"],
            Radar: [A, "Radar"],
            "Radar 4G": [A, "Radar"],
            "Radar C110e": [A, "Radar"],
            Mazaa: [A, "Mazaa"],
            Mondrian: [A, "Mondrian"],
            Schubert: [A, "Schubert"],
            "7 Schubert T9292": [A, "Schubert"],
            Spark: [A, "Spark"],
            T8788: [A, "Surround"],
            "TITAN X310e": [A, "Titan"],
            X310e: [A, "Titan"],
            PI39100: [A, "Titan"],
            PI86100: [A, "Titan II"],
            Ultimate: [A, "Ultimate"]
        },
        LG: {
            GW910: [R, "Optimus 7"],
            "LG E-900": [R, "Optimus 7 E900"],
            "LG-E900": [R, "Optimus 7 E900"],
            "LG-E900h": [R, "Optimus 7 E900"],
            "LG-C900": [R, "Optimus 7Q"],
            "LG-C900B": [R, "Quantum"],
            "LG-C900k": [R, "Quantum"]
        },
        nokia: {SeaRay: ["Nokia", "Lumia 800"], "800C": ["Nokia", "Lumia 800"]},
        NOKIA: {
            "710": ["Nokia", "Lumia 710"],
            "Nokia 710": ["Nokia", "Lumia 710"],
            "Lumia 710": ["Nokia", "Lumia 710"],
            "Lumia 719": ["Nokia", "Lumia 719"],
            "Lumia 800": ["Nokia", "Lumia 800"],
            "800": ["Nokia", "Lumia 800"],
            "Lumia 900": ["Nokia", "Lumia 900"],
            XXX: ["Nokia", "prototype"]
        },
        SAMSUNG: {
            "GT-I8350": [B, "Omnia W"],
            "GT-I8350T": [B, "Omnia W"],
            "SGH-i677": [B, "Focus Flash"],
            "SGH-i707": [B, "Taylor"],
            "SGH-i917": [B, "Omnia 7"],
            "SGH-I917": [B, "Omnia 7"],
            "SGH-i917.": [B, "Focus"],
            "SGH-i917R": [B, "Focus"],
            "SGH-i937": [B, "Focus S"],
            OMNIA7: [B, "Omnia 7"],
            OMINA7: [B, "Omnia 7"],
            Taylor: [B, "Taylor"]
        },
        TOSHIBA: {TSUNAGI: ["Toshiba", "Tsunagi"]}
    };
    var I = {
        Android: [null, null],
        "google sdk": [null, null],
        sdk: [null, null],
        generic: [null, null],
        "generic x86": [null, null],
        "amd brazos": ["AMD", "Fusionbased device"],
        "Amlogic M1 reference board": ["Amlogic", "M1 reference board"],
        AML8726M: ["Amlogic", "AML8726-Mbased device"],
        "vexpress a9": ["ARM", "Versatile Express development platform"],
        bcm7231: ["Broadcom", "BCM7231based device", "television"],
        bcm7425: ["Broadcom", "BCM7425based device", "television"],
        bcm7429: ["Broadcom", "BCM7429based device", "television"],
        "imx50 rdp": ["Freescale", "i.MX50based device"],
        "imx51 bbg": ["Freescale", "i.MX51based device"],
        "imx53 loco": ["Freescale", "i.MX53based device"],
        "imx53 mp204f3": ["Freescale", "i.MX53based device"],
        "imx53 smd": ["Freescale", "i.MX53based device"],
        "imx53 yeagle": ["Freescale", "i.MX53based device"],
        imx6q: ["Freescale", "i.MX6Qbased device"],
        "ODROID-A": ["Hardkernel", "ODROID-A developer tablet", "tablet"],
        "mfld dv10": ["Intel", "Medfieldbased device"],
        "mfld dv20": ["Intel", "Medfieldbased device"],
        "mfld lw00": ["Intel", "Medfieldbased device"],
        "mfld pr2": ["Intel", "Medfieldbased device"],
        "mfld pr3": ["Intel", "Medfieldbased device"],
        "berlin bg2": ["Marvell", "Armada 1000based device", "television"],
        "MStar Amber3": ["MStar", "Amber3based device"],
        "Konka Amber3": ["MStar", "Amber3based device"],
        mt5396: ["Mediatek", "MT5396based device", "television"],
        bird75v2: ["Mediatek", "MT6575based device"],
        "eagle75v1 2": ["Mediatek", "MT6575based device"],
        "MBX DVBT reference board (c03ref)": ["MXB", "DVBT reference board", "television"],
        NS2816: ["Nufront", "NuSmart 2816based device"],
        Ventana: ["nVidia", "Tegra Ventana development kit"],
        Cardhu: ["nVidia", "Tegra 3based device"],
        Panda: ["Pandaboard", "Development Kit"],
        pandaboard: ["Pandaboard", "Development Kit"],
        PandaBoard: ["Pandaboard", "Development Kit"],
        MSM: ["Qualcomm", "Snapdragonbased device"],
        "msm7227 ffa": ["Qualcomm", "Snapdragon S1based device"],
        "msm7627 surf": ["Qualcomm", "Snapdragon S1based device"],
        msm7627a: ["Qualcomm", "Snapdragon S1based device"],
        "msm7627a sku1": ["Qualcomm", "Snapdragon S1based device"],
        "msm7627a sku3": ["Qualcomm", "Snapdragon S1based device"],
        "msm7630 fusion": ["Qualcomm", "Snapdragon S2based device"],
        "msm7630 surf": ["Qualcomm", "Snapdragon S2based device"],
        "msm8660 cougar": ["Qualcomm", "Snapdragon S3based device"],
        "msm8660 surf": ["Qualcomm", "Snapdragon S3based device"],
        msm8960: ["Qualcomm", "Snapdragon S4based device"],
        rk2808sdk: ["Rockchip", "RK2808based device"],
        RK2818: ["Rockchip", "RK2818based device"],
        rk2818sdk: ["Rockchip", "RK2818based device"],
        "Android-for-Rockchip-2818": ["Rockchip", "RK2818based device"],
        rk29sdk: ["Rockchip", "RK29based device"],
        Rk29sdk: ["Rockchip", "RK29based device"],
        rk30sdk: ["Rockchip", "RK30based device"],
        s3c6410: ["Samsung", "S3C6410based device"],
        smdk6410: ["Samsung", "S3C6410based device"],
        SMDKC110: ["Samsung", "Exynos 3110based device"],
        SMDKV210: ["Samsung", "Exynos 4210based device"],
        S5PV210: ["Samsung", "Exynos 4210based device"],
        "sec smdkc210": ["Samsung", "Exynos 4210based device"],
        SMDK4x12: ["Samsung", "Exynos 4212 or 4412based device"],
        smp86xx: ["Sigma", "SMP86xxbased device", "television"],
        sv8860: ["Skyviia", "SV8860based device", "television"],
        "ste u8500": ["ST Ericsson", "Novathor U8500based device"],
        "Telechips M801 Evaluation Board": ["Telechips", "M801based device", "television"],
        "Telechips TCC8900 Evaluation Board": ["Telechips", "TCC8900based device", "television"],
        "TCC8920 STB EV": ["Telechips", "TCC8920based device", "television"],
        OMAP: ["Texas Instruments", "OMAPbased device"],
        "OMAP SS": ["Texas Instruments", "OMAPbased device"],
        "LogicPD Zoom2": ["Texas Instruments", "OMAPbased device"],
        omap3evm: ["Texas Instruments", "OMAP3based device"],
        Omap5sevm: ["Texas Instruments", "OMAP5based device"],
        "pnx8473 kiryung": ["Trident", "PNX8473based device", "television"],
        crespo: ["Google", "Nexus S"],
        Crespo: ["Google", "Nexus S"],
        Crespo4G: ["Google", "Nexus S"],
        Passion: ["Google", "Nexus One"],
        Bravo: ["HTC", "Desire"],
        dream: ["HTC", "Dream"],
        Vogue: ["HTC", "Touch"],
        "Vendor Optimus": ["LG", "Optimus"],
        Stingray: ["Motorola", "XOOM", "tablet"],
        Wingray: ["Motorola", "XOOM", "tablet"],
        maguro: ["Samsung", "Galaxy Nexus"],
        Maguro: ["Samsung", "Galaxy Nexus"],
        "Toro-VZW": ["Samsung", "Galaxy Nexus"],
        blaze: ["Texas Instruments", "Blaze Tablet", "tablet"],
        Blaze: ["Texas Instruments", "Blaze Tablet", "tablet"],
        "Blaze Tablet": ["Texas Instruments", "Blaze Tablet", "tablet"],
        BlueStacks: ["BlueStacks", "App Player", "desktop"],
        "youwave custom": ["Youwave", "Android on PC", "desktop"],
        A100: ["Acer", "Iconia Tab A100", "tablet"],
        A101: ["Acer", "Iconia Tab A101", "tablet"],
        A200: ["Acer", "Iconia Tab A200", "tablet"],
        A500: ["Acer", "Iconia Tab A500", "tablet"],
        A501: ["Acer", "Iconia Tab A501", "tablet"],
        A510: ["Acer", "Iconia Tab A510", "tablet"],
        A511: ["Acer", "Iconia Tab A511", "tablet"],
        A700: ["Acer", "Iconia Tab A700", "tablet"],
        "Acer A800": ["Acer", "Iconia Tab A800", "tablet"],
        E110: ["Acer", "beTouch E110"],
        E120: ["Acer", "beTouch E120"],
        E130: ["Acer", "beTouch E130"],
        E140: ["Acer", "beTouch E140"],
        E210: ["Acer", "beTouch E210"],
        E310: ["Acer", "Liquid mini"],
        E320: ["Acer", "Liquid Express"],
        E330: ["Acer", "Liquid Glow"],
        E400: ["Acer", "beTouch E400"],
        G100W: ["Acer", "G100W"],
        S100: ["Acer", "Liquid"],
        S110: ["Acer", "Stream"],
        S120: ["Acer", "Liquid mt"],
        S300: ["Acer", "Iconia Smart"],
        S500: ["Acer", "CloudMobile"],
        TD600: ["Acer", "beTouch TD600"],
        Liquid: ["Acer", "Liquid"],
        "Liquid E": ["Acer", "Liquid E"],
        "Liquid Mt": ["Acer", "Liquid mt"],
        "Liquid MT": ["Acer", "Liquid mt"],
        "Liquid Metal": ["Acer", "Liquid mt"],
        Stream: ["Acer", "Stream"],
        N700: ["aigo", "N700", "tablet"],
        M801: ["aigo", "M801", "tablet"],
        Novo7: ["Ainovo", "Novo7", "tablet"],
        "Novo7 Aurora": ["Ainovo", "Novo7 Aurora", "tablet"],
        "Novo7 Advanced": ["Ainovo", "Novo7 Advanced", "tablet"],
        "Novo7 Advanced2": ["Ainovo", "Novo7 Advanced 2", "tablet"],
        "Novo7 Basic": ["Ainovo", "Novo7 Basic", "tablet"],
        "Novo7 ELF": ["Ainovo", "Novo7 Elf", "tablet"],
        "Novo7 PALADIN": ["Ainovo", "Novo7 Paladin", "tablet"],
        "Novo8 Advanced": ["Ainovo", "Novo8 Advanced", "tablet"],
        "one touch 890": ["Alcatel", "One Touch 890"],
        "one touch 890D": ["Alcatel", "One Touch 890"],
        "one touch 891": ["Alcatel", "One Touch 891"],
        "ONE TOUCH 903": ["Alcatel", "One Touch 903SHV-E170K"],
        "one touch 906": ["Alcatel", "One Touch 906"],
        "one touch 908": ["Alcatel", "One Touch 908"],
        "one touch 908F": ["Alcatel", "One Touch 908"],
        "one touch 908S": ["Alcatel", "One Touch 908"],
        "one touch 910": ["Alcatel", "One Touch 910"],
        "one touch 918": ["Alcatel", "One Touch 918"],
        "one touch 918D": ["Alcatel", "One Touch 918"],
        "ONE TOUCH 918D": ["Alcatel", "One Touch 918"],
        "one touch 918M": ["Alcatel", "One Touch 918"],
        "one touch 918N": ["Alcatel", "One Touch 918"],
        "one touch 980": ["Alcatel", "One Touch 980"],
        "one touch 980A": ["Alcatel", "One Touch 980"],
        "one touch 981A": ["Alcatel", "One Touch 981"],
        "one touch 986": ["Alcatel", "One Touch 986"],
        "one touch 990": ["Alcatel", "One Touch 990"],
        "one touch 990A": ["Alcatel", "One Touch 990"],
        "one touch 991": ["Alcatel", "One Touch 991"],
        "one touch 991D": ["Alcatel", "One Touch 991"],
        "ONE TOUCH 993": ["Alcatel", "One Touch 993"],
        "one touch 995": ["Alcatel", "One Touch 995"],
        "Telenor OneTouch": ["Alcatel", "One Touch 990"],
        "OT 918": ["Alcatel", "One Touch 918"],
        Venture: ["Alcatel", "Venture"],
        "Allwinner A10": ["AllWinner", "A10", "tablet"],
        "97FC": ["AllWinner", "A10 97FC", "tablet"],
        "Kindle Fire": ["Amazon", "Kindle Fire", "tablet"],
        "Amazon Kindle Fire": ["Amazon", "Kindle Fire", "tablet"],
        AMD120: ["AnyDATA", "AnyTAB AMD120", "tablet"],
        MW0811: ["AOC", "Breeze MW0811", "tablet"],
        "MW0821 V2.0": ["AOC", "Breeze MW0821", "tablet"],
        MW0922: ["AOC", "Breeze MW0922", "tablet"],
        "Apanda A60": ["Apanda", "A60"],
        "apanda-A60": ["Apanda", "A60"],
        A80KSC: ["Archos", "Arnova 8", "tablet"],
        AN7CG2: ["Archos", "Arnova 7", "tablet"],
        A101B: ["Archos", "Arnova 10", "tablet"],
        AN10BG2DT: ["Archos", "Arnova 10 B", "tablet"],
        AN10G2: ["Archos", "Arnova 10 G2", "tablet"],
        A32: ["Archos", "32", "media"],
        A35DE: ["Archos", "35 Smart Home Phone"],
        A43: ["Archos", "43", "media"],
        Archos5: ["Archos", "5", "media"],
        A70H: ["Archos", "7", "tablet"],
        A70HB: ["Archos", "7", "tablet"],
        A70BHT: ["Archos", "7", "tablet"],
        A70CHT: ["Archos", "7C", "tablet"],
        A70S: ["Archos", "70", "tablet"],
        A7EB: ["Archos", "70B", "tablet"],
        "ARCHOS 70it2": ["Archos", "70 IT 2", "tablet"],
        "ARCHOS 80G9": ["Archos", "80 G9", "tablet"],
        "ARCHOS 101G9": ["Archos", "101 G9", "tablet"],
        A101IT: ["Archos", "101 IT", "tablet"],
        ASTRI: ["ASTRI", "e-reader", "ereader"],
        eeepc: ["Asus", "Eee Pc"],
        "asus laptop": ["Asus", "Eee Pc"],
        ME171: ["Asus", "Eee Pad MeMO", "tablet"],
        "Slider SL101": ["Asus", "Eee Pad Slider", "tablet"],
        EPAD: ["Asus", "Eee Pad Transformer", "tablet"],
        TF101: ["Asus", "Eee Pad Transformer", "tablet"],
        "Transformer TF101": ["Asus", "Eee Pad Transformer", "tablet"],
        "Transformer TF101G": ["Asus", "Eee Pad Transformer", "tablet"],
        TF201: ["Asus", "Eee Pad Transformer Prime", "tablet"],
        "Transformer Prime TF201": ["Asus", "Eee Pad Transformer Prime", "tablet"],
        "Transformer Prime": ["Asus", "Eee Pad Transformer Prime", "tablet"],
        "Transformer Pad TF300T": ["Asus", "Transformer Pad 300", "tablet"],
        "ASUS Transformer TF300T": ["Asus", "Transformer Pad 300", "tablet"],
        "ASUS Transformer Pad TF300T": ["Asus", "Transformer Pad 300", "tablet"],
        "ASUS Transformer Pad TF300TG": ["Asus", "Transformer Pad 300", "tablet"],
        "ASUS Transformer Pad TF700T": ["Asus", "Transformer Pad Infinity 700", "tablet"],
        "ASUS Transformer Pad TF700K": ["Asus", "Transformer Pad Infinity 700", "tablet"],
        "ASUS Transformer TF700K": ["Asus", "Transformer Pad Infinity 700", "tablet"],
        PadFone: ["Asus", "Padfone", "tablet"],
        "OMS TTD": ["Asus", "Eee Pc T10"],
        "ASUS T20": ["Asus", "Eee Pc T20"],
        ETBW11AA: ["Asus", "Tough"],
        "AUX V900": ["AUX", "V900"],
        M910A: ["AUX", "M910"],
        "PICOpad-QGN": ["Axioo", "Picopad QGN", "tablet"],
        NOOK: ["Barnes & Noble", "NOOK", "ereader"],
        NookColor: ["Barnes & Noble", "NOOK Color", "ereader"],
        "NOOK BNRV200": ["Barnes & Noble", "NOOK Color", "ereader"],
        "NOOK BNRV300": ["Barnes & Noble", "NOOK Color", "ereader"],
        NookTablet: ["Barnes & Noble", "NOOK Tablet", "ereader"],
        "Nook Tablet": ["Barnes & Noble", "NOOK Tablet", "ereader"],
        "NOOK BNTV250": ["Barnes & Noble", "NOOK Tablet", "ereader"],
        "NOOK BNTV250A": ["Barnes & Noble", "NOOK Tablet", "ereader"],
        BNTV250: ["Barnes & Noble", "NOOK Tablet", "ereader"],
        BNTV250A: ["Barnes & Noble", "NOOK Tablet", "ereader"],
        "NOOK Slate": ["Barnes & Noble", "NOOK Tablet", "ereader"],
        "BenWee 5100": ["BenWee", "5100"],
        CA907AAC0G: ["Besta", "CA907AAC0G"],
        BM999: ["Bmorn", "BM999", "tablet"],
        V11: ["Bmorn", "V11", "tablet"],
        V99: ["Bmorn", "V99", "tablet"],
        "bq DaVinci": ["bq", "DaVinci", "tablet"],
        CT704: ["Carrefour", "CT704", "tablet"],
        CT1002: ["Carrefour", "CT1002", "tablet"],
        "Camangi-Mangrove7": ["Camangi", "Mangrove 7", "tablet"],
        WS171: ["Camangi", "WebStation", "tablet"],
        IS11CA: ["Casio", "GzOne IS11CA"],
        C771: ["Casio", "GzOne Commando"],
        "CAT NOVA": ["Cat", "NOVA", "tablet"],
        ARMM3V: ["chinaleap", "ARMM3V", "tablet"],
        "CIUS-7": ["Cisco", "Cius", "tablet"],
        "CIUS-7-AT": ["Cisco", "Cius", "tablet"],
        "CSL Spice MI300": ["CSL", "Spice MI300"],
        "CSL-MI410": ["CSL", "Spice MI410"],
        MID1024: ["Coby", "Kyros MID1024", "tablet"],
        MID1125: ["Coby", "Kyros MID1125", "tablet"],
        MID1126: ["Coby", "Kyros MID1126", "tablet"],
        MID7010: ["Coby", "Kyros MID7010", "tablet"],
        MID7012: ["Coby", "Kyros MID7012", "tablet"],
        MID7015: ["Coby", "Kyros MID7015", "tablet"],
        MID7015A: ["Coby", "Kyros MID7015", "tablet"],
        MID7016: ["Coby", "Kyros MID7016", "tablet"],
        MID7020: ["Coby", "Kyros MID7020", "tablet"],
        MID7022: ["Coby", "Kyros MID7022", "tablet"],
        MID7024: ["Coby", "Kyros MID7024", "tablet"],
        MID7025: ["Coby", "Kyros MID7025", "tablet"],
        MID7127: ["Coby", "Kyros MID7127", "tablet"],
        MID8024: ["Coby", "Kyros MID8024", "tablet"],
        MID8125: ["Coby", "Kyros MID8125", "tablet"],
        MID8127: ["Coby", "Kyros MID8127", "tablet"],
        Z71: ["Commtiva", "Z71"],
        "V-T100": ["Commtiva", "V-T100"],
        "FIH-FB0": ["Commtiva", "HD700"],
        "Coolpad D510": ["Coolpad", "D510"],
        "Coolpad 8020": ["Coolpad", "8020"],
        D530: ["Coolpad", "D530"],
        "Coolpad D530": ["Coolpad", "D530"],
        D539: ["Coolpad", "D539"],
        "Coolpad D539": ["Coolpad", "D539"],
        E239: ["Coolpad", "E239"],
        "Coolpad E239": ["Coolpad", "E239"],
        "Coolpad N930": ["Coolpad", "N930"],
        N930: ["Coolpad", "N930"],
        "Coolpad W706": ["Coolpad", "W706"],
        "Coolpad W706+": ["Coolpad", "W706"],
        "Coolpad W708": ["Coolpad", "W708"],
        W711: ["Coolpad", "W711"],
        "Coolpad 5010": ["Coolpad", "5010"],
        "Coolpad 5210": ["Coolpad", "5210"],
        "Coolpad 5820": ["Coolpad", "5820"],
        "5832": ["Coolpad", "5832"],
        "Coolpad 5832": ["Coolpad", "5832"],
        "5855": ["Coolpad", "5855"],
        "Coolpad 5860": ["Coolpad", "5860"],
        "Coolpad 5860+": ["Coolpad", "5860"],
        "Coolpad 5860s": ["Coolpad", "5860"],
        "5860": ["Coolpad", "5860"],
        "5860A": ["Coolpad", "5860"],
        "Coolpad 5870": ["Coolpad", "5870"],
        "5870": ["Coolpad", "5870"],
        "Coolpad 7005": ["Coolpad", "7005"],
        "7260": ["Coolpad", "7260"],
        "Coolpad 7019": ["Coolpad", "7019"],
        "Coolpad 7260": ["Coolpad", "7260"],
        "Coolpad 8013": ["Coolpad", "8013"],
        "Coolpad 8809": ["Coolpad", "8809"],
        "Coolpad 8810": ["Coolpad", "8810"],
        "8810": ["Coolpad", "8810"],
        "8150": ["Coolpad", "8150"],
        "Coolpad 8150D": ["Coolpad", "8150"],
        "Coolpad 8811": ["Coolpad", "8811"],
        "Coolpad 9900": ["Coolpad", "9900"],
        "Coolpad 8050": ["Coolpad", "8050"],
        ZiiO7: ["Creative", "ZiiO 7", "tablet"],
        "ZiiLABS ZiiO7": ["Creative", "ZiiO 7", "tablet"],
        "ZiiLABS ZiiO10 ": ["Creative", "ZiiO 10", "tablet"],
        "CUBE K8GT A": ["Cube", "K8GT A", "tablet"],
        "CUBE K8GT B": ["Cube", "K8GT B", "tablet"],
        "K8GT C": ["Cube", "K8GT C", "tablet"],
        "K8GT H": ["Cube", "K8GT H", "tablet"],
        "CUBE K8GT H": ["Cube", "K8GT H", "tablet"],
        "K8GT W": ["Cube", "K8GT W", "tablet"],
        "CUBE U8GT": ["Cube", "U8GT", "tablet"],
        "CUBE U9GT": ["Cube", "U9GT", "tablet"],
        "CUBE U9GT 2": ["Cube", "U9GT 2", "tablet"],
        "Cube U9GT2": ["Cube", "U9GT 2", "tablet"],
        U9GT: ["Cube", "U9GT", "tablet"],
        "U9GT2 From moage.com": ["Cube", "U9GT 2", "tablet"],
        "N90 From moage.com": ["Cube", "U9GT 2", "tablet"],
        "U9GT S": ["Cube", "U9GT S", "tablet"],
        "U9GT S A": ["Cube", "U9GT SA", "tablet"],
        "U9GTS A": ["Cube", "U9GT SA", "tablet"],
        "U10GT 2": ["Cube", "U10GT 2", "tablet"],
        "U10GT S": ["Cube", "U10GT S", "tablet"],
        "U30GT-H": ["Cube", "U30GT H", "tablet"],
        "CUBE Q7PRO": ["Cube", "Q7 Pro", "tablet"],
        "CUBE Q7PRO J": ["Cube", "Q7 Pro", "tablet"],
        "Cydle M7 (v0005.04.03.12.ko)": ["Cydle", "M7 MultiPAD", "tablet"],
        "Dell Aero": ["Dell", "Aero"],
        "Dell M01M": ["Dell", "Mini 5", "tablet"],
        "Dell Streak": ["Dell", "Streak", "tablet"],
        "001DL": ["Dell", "Streak", "tablet"],
        "101DL": ["Dell", "Streak Pro", "tablet"],
        GS01: ["Dell", "Streak Pro", "tablet"],
        "Dell Streak Pro": ["Dell", "Streak Pro", "tablet"],
        streak7: ["Dell", "Streak 7", "tablet"],
        "Dell Streak 7": ["Dell", "Streak 7", "tablet"],
        "Dell Streak 10 Pro": ["Dell", "Streak 10 Pro", "tablet"],
        "Dell V04B": ["Dell", "Streak V04B", "tablet"],
        "Dell Venue": ["Dell", "Venue"],
        "Dell XCD35": ["Dell", "XCD35"],
        XCD35: ["Dell", "XCD35"],
        iDx7: ["Digma", "iDx7", "tablet"],
        iDx10: ["Digma", "iDx10", "tablet"],
        "iDx10 3G": ["Digma", "iDx10", "tablet"],
        DM009SH: ["Disney Mobile", "DM009SH"],
        DM010SH: ["Disney Mobile", "DM010SH"],
        DM012SH: ["Disney Mobile", "DM012SH"],
        "F-08D": ["Disney Mobile", "F-08D"],
        "P-05D": ["Disney Mobile", "P-05D"],
        "Tablet-P27": ["DracoTek", "P27 Tablet", "tablet"],
        edgejr: ["EnTourage", "Pocket eDGe", "tablet"],
        l97D: ["EPad", "l97D", "tablet"],
        M4301: ["Eston", "MID M4301", "media"],
        P10AN: ["Exper", "Easypad P10AN", "tablet"],
        "FIH-F0X": ["FIH", "F0X"],
        "Fly IQ260": ["Fly", "IQ260 BlackBird"],
        ISW11F: ["Fujitsu", "Arrows Z"],
        ISW13F: ["Fujitsu", "Arrows Z"],
        IS12F: ["Fujitsu", "Arrows ES"],
        "F-01D": ["Fujitsu", "Arrows Tab LTE", "tablet"],
        "F-03D": ["Fujitsu", "Arrows Kiss"],
        "F-05D": ["Fujitsu", "Arrows X LTE"],
        "F-07D": ["Fujitsu", "Arrows \u00c3\ufffd\u00c2\u00bc"],
        "F-10D": ["Fujitsu", "Arrows X F-10D"],
        "F-12C": ["Fujitsu", "Globetrotter"],
        f12arc: ["Fujitsu", "F12arc"],
        M532: ["Fujitsu", "Stylistic M532", "tablet"],
        Garminfone: ["Garmin-Asus", "Garminfone"],
        "Garmin-Asus A10": ["Garmin-Asus", "Nuvifone A10"],
        "Garmin-Asus A50": ["Garmin-Asus", "Nuvifone A50"],
        TPA60W: ["Gateway", "TPA60W", "tablet"],
        "Geeksphone ZERO": ["Geeksphone", "ZERO"],
        "gemei G2": ["Gemei", "G2", "tablet"],
        "Gemei G2": ["Gemei", "G2", "tablet"],
        "gemei G3": ["Gemei", "G3", "tablet"],
        "Gemei G9": ["Gemei", "G9", "tablet"],
        "GSmart G1317D": ["Gigabyte", "GSmart G1317D"],
        "Gigabyte TB100": ["Gigabyte", "TB100", "tablet"],
        GN100: ["Gionee", "GN100"],
        GN105: ["Gionee", "GN105"],
        GN106: ["Gionee", "GN106"],
        GN200: ["Gionee", "GN200"],
        GN205: ["Gionee", "GN205"],
        GN700W: ["Gionee", "GN700W"],
        GN708W: ["Gionee", "GN708W"],
        "Google Ion": ["Google", "Ion"],
        "Nexus One": ["Google", "Nexus One"],
        NexusOne: ["Google", "Nexus One"],
        "HTC Nexus One": ["Google", "Nexus One"],
        "Nexus S": ["Google", "Nexus S"],
        "Google Nexus S": ["Google", "Nexus S"],
        "Nexus S 4G": ["Google", "Nexus S 4G"],
        "Dooderbutt-4.0.3-v1": ["Google", "Nexus S 4G"],
        "Nexus 7": ["Google", "Nexus 7", "tablet"],
        "Haier HW-W910": ["Haier", "HW-W910"],
        SN10T1: ["HANNspree", "HANNSpad SN10T1", "tablet"],
        SN10T2: ["HANNspree", "HANNSpad SN10T2", "tablet"],
        HannsComb: ["HANNspree", "HANNSpad", "tablet"],
        X1: ["HCL", "ME X1", "tablet"],
        "MID Serails": ["Herotab", "C8", "tablet"],
        "MID Serials": ["Herotab", "C8", "tablet"],
        "COSMO DUO": ["Hiscreen", "Cosmo DUO", "tablet"],
        "HS-U8": ["Hisense", "U8"],
        "HS-T92": ["Hisense", "T92"],
        "HS-E860": ["Hisense", "E860"],
        "HS-E910": ["Hisense", "E910"],
        "HS-E926": ["Hisense", "E926"],
        "HS-EG900": ["Hisense", "EG900"],
        "HS-ET919": ["Hisense", "ET919"],
        EG968B: ["Hisense", "EG968B"],
        "HKPHONE H8-3G": ["HKPhone", "H8 3G"],
        "HOSIN U2": ["Hosin", "U2"],
        Touchpad: ["HP", "TouchPad", "tablet"],
        "HP Touchpad": ["HP", "TouchPad", "tablet"],
        "cm tenderloin": ["HP", "TouchPad", "tablet"],
        "aokp tenderloin": ["HP", "TouchPad", "tablet"],
        "HTC Amaze 4G": ["HTC", "Amaze 4G"],
        "HTC Ruby": ["HTC", "Amaze 4G"],
        "HTC Amaze 4G(Ruby)": ["HTC", "Amaze 4G"],
        "Amaze 4G": ["HTC", "Amaze 4G"],
        "HTC Aria": ["HTC", "Aria"],
        "HTC Aria A6380": ["HTC", "Aria"],
        "HTC Liberty A6380": ["HTC", "Aria"],
        "HTC Liberty": ["HTC", "Aria"],
        "HTC A6366": ["HTC", "Aria"],
        "HTC Bee": ["HTC", "Bee"],
        "HTC ChaCha": ["HTC", "ChaCha"],
        "HTC ChaCha A810e": ["HTC", "ChaCha"],
        "HTC ChaChaCha A810e": ["HTC", "ChaCha"],
        "HTC A810e": ["HTC", "ChaCha"],
        "HTC A9188": ["HTC", "Tianxi"],
        "HTC Bravo": ["HTC", "Desire"],
        "HTC Desire": ["HTC", "Desire"],
        "HTC Desire A8181": ["HTC", "Desire"],
        "HTC Desire A8183": ["HTC", "Desire"],
        "HTC Desire Beats A8181": ["HTC", "Desire"],
        "HTC Desire CDMA": ["HTC", "Desire"],
        "HTC Desire SMS": ["HTC", "Desire"],
        "HTC Desire S.M.S": ["HTC", "Desire"],
        "HTC Desire C": ["HTC", "Desire C"],
        "HTC DesireHD": ["HTC", "Desire HD"],
        "HTC DesireHD A9191": ["HTC", "Desire HD"],
        "HTC DesireHD A9192": ["HTC", "Desire HD"],
        "HTC Desire HD A9191": ["HTC", "Desire HD"],
        "HTC A9191": ["HTC", "Desire HD"],
        "HTC A9191 for AT&T": ["HTC", "Desire HD"],
        "HTC A9192": ["HTC", "Desire HD"],
        "HTC Desire HD": ["HTC", "Desire HD"],
        "HTC Desire HD with Beats Audio": ["HTC", "Desire HD"],
        "HTC Desire S": ["HTC", "Desire S"],
        "HTC DesireS": ["HTC", "Desire S"],
        "HTC DesiresS": ["HTC", "Desire S"],
        "HTC DesireS S510e": ["HTC", "Desire S"],
        "HTC DesireS S510b": ["HTC", "Desire S"],
        "HTC Desire S S510e": ["HTC", "Desire S"],
        "HTC S510e": ["HTC", "Desire S"],
        "HTC Desire Saga": ["HTC", "Desire S"],
        "HTC Desire V": ["HTC", "Desire V"],
        "HTC T328w": ["HTC", "Desire V"],
        "HTC Desire VC": ["HTC", "Desire VC"],
        "HTC T328d": ["HTC", "Desire VC"],
        "HTC T328t": ["HTC", "Desire VT"],
        "HTC Desire Z": ["HTC", "Desire Z"],
        "HTC DesireZ": ["HTC", "Desire Z"],
        "HTC DesireZ A7272": ["HTC", "Desire Z"],
        "HTC Desire Z A7272": ["HTC", "Desire Z"],
        "HTC Vision": ["HTC", "Desire Z"],
        "HTC A7275": ["HTC", "Desire Z"],
        "HTC Dream": ["HTC", "Dream"],
        "HTC S710d": ["HTC", "Droid Incredible 2"],
        "HTC Incredible 2": ["HTC", "Droid Incredible 2"],
        "HTC X515d": ["HTC", "EVO 3D"],
        "HTC X515m": ["HTC", "EVO 3D"],
        "HTC X515C": ["HTC", "EVO 3D"],
        "HTC Evo 3D": ["HTC", "EVO 3D"],
        "HTC EVO 3D": ["HTC", "EVO 3D"],
        "HTC EVO 3D GSM": ["HTC", "EVO 3D"],
        "HTC EVO 3D X515a": ["HTC", "EVO 3D"],
        "HTC EVO 3D GSM X515m": ["HTC", "EVO 3D"],
        "HTC EVO 3D X515m": ["HTC", "EVO 3D"],
        "HTC EVO 3D X515M": ["HTC", "EVO 3D"],
        "HTC EVO3D X515a": ["HTC", "EVO 3D"],
        "HTC EVO3D X515m": ["HTC", "EVO 3D"],
        "HTC Evo 3D X515m": ["HTC", "EVO 3D"],
        "HTC Evo 3D with Beats Audio X515m": ["HTC", "EVO 3D"],
        "HTC Evo 4G": ["HTC", "EVO 4G"],
        "HTC EVO 4G": ["HTC", "EVO 4G"],
        "HTC X515E": ["HTC", "EVO 4G+"],
        "HTC EVO 4G+ For Sprint": ["HTC", "EVO 4G+"],
        "HTC EVO 4G++ For Sprint": ["HTC", "EVO 4G+"],
        "HTC C715c": ["HTC", "EVO Design 4G"],
        "HTC Design 4G": ["HTC", "EVO Design 4G"],
        "HTC EVO design 4G": ["HTC", "EVO Design 4G"],
        "HTC EVO Design 4G": ["HTC", "EVO Design 4G"],
        "HTC Evo Shift": ["HTC", "EVO Shift"],
        "HTC EVO Shift 4G": ["HTC", "EVO Shift"],
        "HTC A310e": ["HTC", "Explorer"],
        "HTC Explorer": ["HTC", "Explorer"],
        "HTC Explorer A310b": ["HTC", "Explorer"],
        "HTC Explorer A310e": ["HTC", "Explorer"],
        "HTC P510e": ["HTC", "Flyer", "tablet"],
        "HTC Flyer": ["HTC", "Flyer", "tablet"],
        "HTC Flyer P510e": ["HTC", "Flyer", "tablet"],
        "HTC Flyer P512": ["HTC", "Flyer", "tablet"],
        "HTC Flyer P512 NA": ["HTC", "Flyer", "tablet"],
        "HTC P515E": ["HTC", "Flyer 4G", "tablet"],
        "HTC Gratia A6380": ["HTC", "Gratia"],
        "HTC HD": ["HTC", "HD"],
        "HTC HD2": ["HTC", "HD2"],
        "HTC HD2 T8585": ["HTC", "HD2"],
        "HTC HD2(Leo)": ["HTC", "HD2"],
        "HTC HD7": ["HTC", "HD7"],
        "HTC T9299+": ["HTC", "HD7"],
        "HTC HD7 for Sprint": ["HTC", "HD7"],
        "HTC HD7 4G T9299 For AT&T": ["HTC", "HD7"],
        "HTC HD7 4G T9299+ For AT&T": ["HTC", "HD7"],
        "HTC T9299+ For AT&T": ["HTC", "HD7"],
        "HTC HD7S T9399+": ["HTC", "HD7s"],
        "HTC HD7S T9899+": ["HTC", "HD7s"],
        "HTC T9899+ For AT&T": ["HTC", "HD7s"],
        "VitMod ExtraLite 1.6.5.fullodex for HTC HD7 Pro": ["HTC", "HD7 Pro"],
        "HTC Hero": ["HTC", "Hero"],
        "HTC HERO": ["HTC", "Hero"],
        "HTC Hero CDMA": ["HTC", "Hero"],
        "HTC HERO CDMA": ["HTC", "Hero"],
        "HTC HERO200": ["HTC", "Hero 200"],
        "HTC Hero S": ["HTC", "Hero S"],
        "HTC IMAGIO": ["HTC", "Imagio"],
        "HTC Incredible": ["HTC", "Incredible"],
        "HTC Incredible S710E": ["HTC", "Incredible S"],
        "HTC S710e": ["HTC", "Incredible S"],
        "HTC Incredible S": ["HTC", "Incredible S"],
        "HTC Incredible S S710e": ["HTC", "Incredible S"],
        "HTC Incredible S s710e": ["HTC", "Incredible S"],
        "HTC IncredibleS S710e": ["HTC", "Incredible S"],
        "HTC Incredible S with Beats Audio": ["HTC", "Incredible S"],
        "HTC Vivo": ["HTC", "Incredible S"],
        "HTC Innovation": ["HTC", "Innovation"],
        "HTC Inspire 4G": ["HTC", "Inspire 4G"],
        "HTC HD7 Inspire 4G For Vodafone": ["HTC", "Inspire 4G"],
        "HTC P715a": ["HTC", "Jetstream", "tablet"],
        "HTC Legend": ["HTC", "Legend"],
        "HTC Magic": ["HTC", "Magic"],
        "HTC Sapphire": ["HTC", "Magic"],
        "HTC Lexikon": ["HTC", "Merge"],
        "HTC One S": ["HTC", "One S"],
        "HTC Z520e": ["HTC", "One S"],
        "HTC One V": ["HTC", "One V"],
        "HTC T320e": ["HTC", "One V"],
        "HTC One X": ["HTC", "One X"],
        "HTC S720e": ["HTC", "One X"],
        "HTC Endeavour-LS": ["HTC", "One X"],
        "HTC One XL": ["HTC", "One XL"],
        "HTC X710a": ["HTC", "Raider 4G"],
        "HTC Raider": ["HTC", "Raider 4G"],
        "HTC Raider X710e": ["HTC", "Raider 4G"],
        "HTC Raider X710s": ["HTC", "Raider 4G"],
        "HTC Raider 4G X710e": ["HTC", "Raider 4G"],
        "HTC PH39100": ["HTC", "Raider 4G"],
        "HTC Holiday": ["HTC", "Raider 4G"],
        "HTC Velocity 4G X710s": ["HTC", "Raider 4G"],
        "HTC Rezound": ["HTC", "Rezound"],
        "HTC Rhyme S510b": ["HTC", "Rhyme"],
        "HTC S510b": ["HTC", "Rhyme"],
        "HTC Bliss": ["HTC", "Rhyme"],
        "HTC Bliss S510b": ["HTC", "Rhyme"],
        "HTC Salsa C510e": ["HTC", "Salsa"],
        "HTC C510e": ["HTC", "Salsa"],
        "HTC Z710a": ["HTC", "Sensation"],
        "HTC Z710e": ["HTC", "Sensation"],
        "HTC Z710t": ["HTC", "Sensation"],
        "HTC Sensation": ["HTC", "Sensation"],
        "HTC Sensation Z710": ["HTC", "Sensation"],
        "HTC Sensation Z710a": ["HTC", "Sensation"],
        "HTC Sensation Z710e": ["HTC", "Sensation"],
        "HTC Sensation Z710E": ["HTC", "Sensation"],
        "HTC Sensation Z710e For AT&T": ["HTC", "Sensation"],
        "HTC Sensation Z710e with Beats Audio": ["HTC", "Sensation"],
        "HTC Sensation with Beats Audio Z710e": ["HTC", "Sensation"],
        "HTC Sensation with Beats Audio": ["HTC", "Sensation"],
        "HTC Sensation Taste": ["HTC", "Sensation"],
        "HTC Pyramid": ["HTC", "Sensation"],
        "HTC Pyramid Z710a": ["HTC", "Sensation"],
        "HTC Pyramid Z710e": ["HTC", "Sensation"],
        "HTC Sensation 4G": ["HTC", "Sensation"],
        "HTC Sensation 4G with Beats Audio": ["HTC", "Sensation"],
        "HTC Sensation G14": ["HTC", "Sensation"],
        "HTC Sensation G14 for AT&T": ["HTC", "Sensation"],
        "HTC G14 sensation": ["HTC", "Sensation"],
        "HTC Z715e": ["HTC", "Sensation XE"],
        "HTC Sensation Z715e": ["HTC", "Sensation XE"],
        "HTC SensationXE Beats": ["HTC", "Sensation XE"],
        "HTC SensationXE Beats Z715a": ["HTC", "Sensation XE"],
        "HTC SensationXE Beats Z715e": ["HTC", "Sensation XE"],
        "HTC Sensation XE": ["HTC", "Sensation XE"],
        "HTC Sensation XE Z715e": ["HTC", "Sensation XE"],
        "HTC SensationXE Z715e": ["HTC", "Sensation XE"],
        "HTC Sensation XE Beats": ["HTC", "Sensation XE"],
        "HTC SensationXE with Beats Audio": ["HTC", "Sensation XE"],
        "HTC Sensation XE with Beats Audio": ["HTC", "Sensation XE"],
        "HTC Sensation XE with Beats Audio Z715a": ["HTC", "Sensation XE"],
        "HTC Sensation Juredroid XE Beats Audio": ["HTC", "Sensation XE"],
        "HTC Sensation XE with Beats Audio Z715e": ["HTC", "Sensation XE"],
        "HTC Sensation XE With Beats Audio Z715e": ["HTC", "Sensation XE"],
        "HTC Sensation 4G XE with Beats Audio": ["HTC", "Sensation XE"],
        "HTC Sensation with Beats Audio Z715e": ["HTC", "Sensation XE"],
        "HTC X315E": ["HTC", "Sensation XL"],
        "HTC SensationXL Beats X315b": ["HTC", "Sensation XL"],
        "HTC SensationXL Beats X315e": ["HTC", "Sensation XL"],
        "HTC Sensation XL with Beats Audio X315b": ["HTC", "Sensation XL"],
        "HTC Sensation XL with Beats Audio X315e": ["HTC", "Sensation XL"],
        "HTC Runnymede": ["HTC", "Sensation XL"],
        "HTC G21": ["HTC", "Sensation XL"],
        "HTC PH06130": ["HTC", "Status"],
        "HTC Status": ["HTC", "Status"],
        "HTC Tattoo": ["HTC", "Tattoo"],
        "HTC TATTOO A3288": ["HTC", "Tattoo"],
        "HTC click": ["HTC", "Tattoo"],
        "HTC X310e": ["HTC", "Titan"],
        "HTC T7373": ["HTC", "Touch Pro II"],
        "HTC ThunderBolt": ["HTC", "ThunderBolt"],
        "HTC Mecha": ["HTC", "ThunderBolt"],
        "HTC Velocity 4G": ["HTC", "Velocity 4G"],
        "HTC Wildfire": ["HTC", "Wildfire"],
        "HTC Wildfire A3333": ["HTC", "Wildfire"],
        "HTC A3366": ["HTC", "Wildfire"],
        "HTC A3380": ["HTC", "Wildfire"],
        "HTC WildfireS": ["HTC", "Wildfire S"],
        "HTC Wildfire S": ["HTC", "Wildfire S"],
        "Htc Wildfire s": ["HTC", "Wildfire S"],
        "HTC Wildfire S A510e": ["HTC", "Wildfire S"],
        "HTC Wildfire S A510b": ["HTC", "Wildfire S"],
        "HTC WildfireS A510e": ["HTC", "Wildfire S"],
        "HTC WildfireS A510b": ["HTC", "Wildfire S"],
        "htc wildfire s a510e": ["HTC", "Wildfire S"],
        "HTC Wildfire S A515c": ["HTC", "Wildfire S"],
        "HTC A510a": ["HTC", "Wildfire S"],
        "HTC A510e": ["HTC", "Wildfire S"],
        "HTC A510c": ["HTC", "Wildfire S"],
        HTCX06HT: ["HTC", "Desire"],
        "HTC A6390": ["HTC", "A6390"],
        "HTC A8180": ["HTC", "A8180"],
        "HTC PG762": ["HTC", "PG762"],
        "HTC S715e": ["HTC", "S715e"],
        "HTC S720t": ["HTC", "S720t"],
        "HTC Z510d": ["HTC", "Z510d"],
        "HTC Z560e": ["HTC", "Z560e"],
        "HTC VLE U": ["HTC", "One S"],
        "HTC VLE#U": ["HTC", "One S"],
        "HTC VIE U": ["HTC", "One S"],
        "HTC EVA UL": ["HTC", "One V"],
        "HTC ENR U": ["HTC", "One X"],
        "ENR U": ["HTC", "One X"],
        EndeavorU: ["HTC", "One X"],
        Liberty: ["HTC", "Aria"],
        Desire: ["HTC", "Desire"],
        "Desire A8181": ["HTC", "Desire"],
        "desire hd": ["HTC", "Desire HD"],
        "Desire HD": ["HTC", "Desire HD"],
        "Dedire HD": ["HTC", "Desire HD"],
        "Desire Hd (ace)": ["HTC", "Desire HD"],
        "Desire S": ["HTC", "Desire S"],
        DesireS: ["HTC", "Desire S"],
        "Desire Saga": ["HTC", "Desire S"],
        "Desire Z": ["HTC", "Desire Z"],
        Dream: ["HTC", "Dream"],
        "Droid Incredible": ["HTC", "Droid Incredible"],
        EVO: ["HTC", "EVO"],
        "Evo HD2": ["HTC", "EVO HD"],
        "Evo 3D Beats X515m": ["HTC", "EVO 3D"],
        "Evo 3D GSM": ["HTC", "EVO 3D"],
        "EVO 3D X515m": ["HTC", "EVO 3D"],
        "EVO3D X515m": ["HTC", "EVO 3D"],
        "Evo 4G": ["HTC", "EVO 4G"],
        "EVO 4G": ["HTC", "EVO 4G"],
        photon: ["HTC", "HD mini"],
        "GinDream/GinMagic": ["HTC", "Dream"],
        HD2: ["HTC", "HD2"],
        "HD7  Pro": ["HTC", "HD7 Pro"],
        Hero: ["HTC", "Hero"],
        "HERO CDMA": ["HTC", "Hero"],
        HERO200: ["HTC", "Hero 200"],
        Incredible: ["HTC", "Droid Incredible"],
        "Incredible 2": ["HTC", "Droid Incredible 2"],
        "Incredible S": ["HTC", "Incredible S"],
        "IncredibleS S710e": ["HTC", "Incredible S"],
        IncredibleS: ["HTC", "Incredible S"],
        "Inspire HD": ["HTC", "Inspire 4G"],
        "Inspire 4G": ["HTC", "Inspire 4G"],
        Legend: ["HTC", "Legend"],
        NexusHD2: ["HTC", "HD2"],
        "Nexus HD2": ["HTC", "HD2"],
        "Docomo HT-03A": ["HTC", "Magic"],
        "MIUI.us Sensation 4G": ["HTC", "Sensation 4G"],
        "SiRF Dream": ["HTC", "Dream"],
        Pyramid: ["HTC", "Sensation"],
        Sensation: ["HTC", "Sensation"],
        "Sensation Z710e": ["HTC", "Sensation"],
        "Sensation 4G": ["HTC", "Sensation"],
        "Sensation 4g": ["HTC", "Sensation"],
        "TripNiCE Pyramid": ["HTC", "Sensation"],
        "SensationXE Beats Z715e": ["HTC", "Sensation XE"],
        "SensationXL Beats X315e": ["HTC", "Sensation XL"],
        Click: ["HTC", "Tattoo"],
        Wildfire: ["HTC", "Wildfire"],
        "Wildfire S": ["HTC", "Wildfire S"],
        "Wildfire S A510e": ["HTC", "Wildfire S"],
        "Sprint APX515CKT": ["HTC", "EVO 3D"],
        "Sprint APA9292KT": ["HTC", "EVO 4G"],
        "Sprint APA7373KT": ["HTC", "EVO Shift 4G"],
        "Sprint APC715CKT": ["HTC", "EVO Design 4G"],
        A3380: ["HTC", "Wildfire"],
        A6277: ["HTC", "Hero"],
        a7272: ["HTC", "Desire Z"],
        "A7272+(HTC DesireZ)": ["HTC", "Desire Z"],
        S31HT: ["HTC", "Aria"],
        S710d: ["HTC", "Droid Incredible 2"],
        S710D: ["HTC", "Droid Incredible 2"],
        X06HT: ["HTC", "Desire"],
        "001HT": ["HTC", "Desire HD"],
        X325a: ["HTC", "One X"],
        Z520m: ["HTC", "One S"],
        Z710: ["HTC", "Sensation"],
        Z710e: ["HTC", "Sensation"],
        T9199h: ["HTC", "T9199h"],
        "HTC S610d": ["HTC", "S610d"],
        ADR6200: ["HTC", "Droid Eris"],
        ADR6300: ["HTC", "Droid Incredible"],
        ADR6325VW: ["HTC", "Merge"],
        ADR6330VW: ["HTC", "Rhyme"],
        ADR6350: ["HTC", "Droid Incredible 2"],
        ADR6400L: ["HTC", "Thunderbolt 4G"],
        "ADR6400L 4G": ["HTC", "Thunderbolt 4G"],
        "ADR6410LVW 4G": ["HTC", "Fireball"],
        ADR6425LVW: ["HTC", "Rezound"],
        "ADR6425LVW 4G": ["HTC", "Rezound"],
        "Coquettish Red": ["HTC", "Rezound"],
        PB99400: ["HTC", "Droid Incredible"],
        pcdadr6350: ["HTC", "Droid Incredible 2"],
        PC36100: ["HTC", "EVO 4G"],
        PG06100: ["HTC", "EVO Shift 4G"],
        PG41200: ["HTC", "EVO View 4G", "tablet"],
        PG86100: ["HTC", "EVO 3D"],
        PG8610000: ["HTC", "EVO 3D"],
        PH44100: ["HTC", "EVO Design 4G"],
        PJ83100: ["HTC", "One X"],
        ISW11HT: ["HTC", "EVO 4G"],
        ISW12HT: ["HTC", "EVO 3D"],
        ISW13HT: ["HTC", "J"],
        "USCCADR6275US Carrier ID 45": ["HTC", "Desire"],
        USCCADR6285US: ["HTC", "Hero S"],
        "USCCADR6325US Carrier ID 45": ["HTC", "Merge"],
        MediaPad: ["Huawei", "MediaPad", "tablet"],
        "Huawei MediaPad": ["Huawei", "MediaPad", "tablet"],
        "HUAWEI MediaPad": ["Huawei", "MediaPad", "tablet"],
        "Huawei S7-312u": ["Huawei", "MediaPad", "tablet"],
        "MediaPad 10 FHD": ["Huawei", "MediaPad", "tablet"],
        "Huawei C8500": ["Huawei", "C8500"],
        "Huawei C8500S": ["Huawei", "C8500"],
        "Huawei C8600": ["Huawei", "C8600"],
        "Huawei C8650": ["Huawei", "C8650"],
        "Huawei C8650+": ["Huawei", "C8650"],
        "Huawei C8800": ["Huawei", "IDEOS X5"],
        "Huawei C8810": ["Huawei", "Ascend G300"],
        "Huawei C8812": ["Huawei", "Ascend C8812"],
        "Huawei C8812E": ["Huawei", "Ascend C8812"],
        "Huawei C8825D": ["Huawei", "Ascend C8825D"],
        "Huawei C8860E": ["Huawei", "Honor"],
        "Huawei M835": ["Huawei", "M835"],
        "Huawei M860": ["Huawei", "Ascend"],
        "Huawei M921": ["Huawei", "M921"],
        "Huawei S8520": ["Huawei", "S8520"],
        "Huawei S8600": ["Huawei", "S8600"],
        "Huawei T8300": ["Huawei", "T8300"],
        "Huawei T8600": ["Huawei", "T8600"],
        "Huawei T8830": ["Huawei", "T8830"],
        T8830: ["Huawei", "T8830"],
        T8620: ["Huawei", "T8620"],
        "Huawei T8828": ["Huawei", "T8828"],
        "Huawei U8220": ["Huawei", "U8220"],
        "Huawei u8500": ["Huawei", "IDEOS X2"],
        "Huawei U8815": ["Huawei", "Ascend G300"],
        "Huawei U8825D": ["Huawei", "Ascend G330D"],
        "Huawei U8850": ["Huawei", "Vision"],
        "Huawei U8652": ["Huawei", "Sonic"],
        "Huawei U8800-51": ["Huawei", "IDEOS X5"],
        "Huawei U8818": ["Huawei", "Ascend G300"],
        "Huawei U9000": ["Huawei", "Ascend X"],
        "Huawei IDEOS U8500": ["Huawei", "IDEOS X2"],
        "Huawei IDEOS U8650": ["Huawei", "Sonic"],
        "Huawei IDEOS X3": ["Huawei", "IDEOS X3"],
        "Huawei Ideos X5": ["Huawei", "IDEOS X5"],
        "Huawei Ideos X5 1.12.9(ret4rt)": ["Huawei", "IDEOS X5"],
        "Huawei SONIC": ["Huawei", "Sonic"],
        "Huawei 8100-9": ["Huawei", "U8100"],
        FUSIONideos: ["Huawei", "IDEOS"],
        "Gnappo Ideos": ["Huawei", "IDEOS"],
        Ideos: ["Huawei", "IDEOS"],
        "IDEOS X5": ["Huawei", "IDEOS X5"],
        "Ideos S7": ["Huawei", "IDEOS S7", "tablet"],
        "IDEOS S7": ["Huawei", "IDEOS S7", "tablet"],
        "IDEOS S7 Slim": ["Huawei", "IDEOS S7", "tablet"],
        "Huawei S7": ["Huawei", "IDEOS S7", "tablet"],
        SONIC: ["Huawei", "Sonic"],
        "Kyivstar Aqua": ["Huawei", "Sonic"],
        "Lucky Ultra Sonic U8650": ["Huawei", "Sonic"],
        "Turkcell T20": ["Huawei", "Sonic"],
        "MTC 950": ["Huawei", "U8160"],
        "MTC 955": ["Huawei", "Sonic"],
        "MTC Evo": ["Huawei", "C8500"],
        "MTC Android": ["Huawei", "U8110"],
        S31HW: ["Huawei", "Pocket WiFi S"],
        S41HW: ["Huawei", "Pocket WiFi S II"],
        "007HW": ["Huawei", "Vision"],
        UM840: ["Huawei", "Evolution"],
        M860: ["Huawei", "Ascend"],
        M865: ["Huawei", "Ascend II"],
        M886: ["Huawei", "Glory"],
        C8150: ["Huawei", "IDEOS"],
        c8500: ["Huawei", "C8500"],
        C8500: ["Huawei", "C8500"],
        C8500S: ["Huawei", "C8500"],
        C8600: ["Huawei", "C8600"],
        c8650: ["Huawei", "C8650"],
        C8650: ["Huawei", "C8650"],
        c8800: ["Huawei", "C8800"],
        C8800: ["Huawei", "C8800"],
        c8810: ["Huawei", "Ascend G300C"],
        C8812: ["Huawei", "Ascend C8812"],
        S8600: ["Huawei", "S8600"],
        U8100: ["Huawei", "U8100"],
        U8110: ["Huawei", "U8110"],
        u8120: ["Huawei", "U8120"],
        U8120: ["Huawei", "U8120"],
        U8180: ["Huawei", "IDEOS X1"],
        U8220: ["Huawei", "Pulse"],
        U8300: ["Huawei", "U8300"],
        U8350: ["Huawei", "Boulder"],
        U8150: ["Huawei", "IDEOS"],
        U8160: ["Huawei", "U8160"],
        U8500: ["Huawei", "IDEOS X2"],
        "U8500 HiQQ": ["Huawei", "U8500 HiQQ Edition"],
        U8510: ["Huawei", "IDEOS X3"],
        u8650: ["Huawei", "Sonic"],
        U8650: ["Huawei", "Sonic"],
        "U8650-1": ["Huawei", "Sonic"],
        U8660: ["Huawei", "Sonic"],
        u8800: ["Huawei", "IDEOS X5"],
        U8800: ["Huawei", "IDEOS X5"],
        "U8800+": ["Huawei", "IDEOS X5"],
        U8800X: ["Huawei", "IDEOS X5"],
        U8800pro: ["Huawei", "IDEOS X5 Pro"],
        U8800PRO: ["Huawei", "IDEOS X5 Pro"],
        U8800Pro: ["Huawei", "IDEOS X5 Pro"],
        u8800pro: ["Huawei", "IDEOS X5 Pro"],
        "U8800 Pro": ["Huawei", "IDEOS X5 Pro"],
        U8818: ["Huawei", "Ascend G300"],
        U8850: ["Huawei", "Vision"],
        u8860: ["Huawei", "Honor"],
        U8860: ["Huawei", "Honor"],
        U9000: ["Huawei", "Ascend X"],
        U9200: ["Huawei", "Ascend P1"],
        "U9200-1": ["Huawei", "Ascend P1"],
        U9500: ["Huawei", "Ascend D1"],
        U9501L: ["Huawei", "Ascend D LTE"],
        U9510: ["Huawei", "Ascend D quad"],
        U9510E: ["Huawei", "Ascend D quad"],
        Comet: ["Huawei", "Comet"],
        GS02: ["Huawei", "Honor"],
        GS03: ["Huawei", "Ascend P1"],
        "DroniX-0.5": ["Huawei", "U8180"],
        "MTS-SP101": ["Huawei", "C8511"],
        TSP21: ["Huawei", "U8110"],
        "HYUNDAI H6": ["Hyundai", "Storm H6"],
        "iBall Slide i7011": ["iBall", "Slide i7011"],
        "NetTAB RUNE": ["IconBit", "NetTab Rune", "tablet"],
        D70W: ["Icoo", "D70W", "tablet"],
        D80: ["Icoo", "D80", "tablet"],
        "INFOBAR A01": ["iida", "INFOBAR A01"],
        M009F: ["Infotmic", "M009F"],
        AZ210A: ["Intel", "AZ210A"],
        AZ210B: ["Intel", "AZ210B"],
        AZ510: ["Intel", "AZ510"],
        greenridge: ["Intel", "Green Ridge", "tablet"],
        "INQ Cloud Touch": ["INQ", "Cloud Touch"],
        "ILT-MX100": ["iRiver", "Tab", "tablet"],
        IVIO_DE38: ["Ivio", "DE38"],
        "JY-G2": ["Jiayu", "G2"],
        "JXD S601WIFI": ["JXD", "S601 WIFI", "media"],
        A2: ["KakaTech", "A2"],
        D91: ["KK", "D91", "tablet"],
        K080: ["Kobo", "K080", "ereader"],
        A106: ["koobee", "A160"],
        "KPT A9": ["KPT", "A9"],
        "EV-S100": ["Kttech", "Take EV-S100"],
        "KM-S120": ["Kttech", "Take 2 KM-S120"],
        "KM-S200": ["TAKE", "Janus KM-S200"],
        "KM-S220": ["Kttech", "Take Tachy KM-S220"],
        "Kyobo mirasol eReader": ["Kyobo", "eReader", "ereader"],
        ISW11K: ["Kyocera", "Digno"],
        "JC-KSP8000": ["Kyocera", "Echo"],
        KSP8000: ["Kyocera", "Echo"],
        Zio: ["Kyocera", "Zio"],
        C5155: ["Kyocera", "C5155"],
        C5170: ["Kyocera", "C5170"],
        M9300: ["Kyocera", "M9300"],
        E800: ["K-Touch", "E800"],
        W606: ["K-Touch", "W606"],
        "K-Touch T619": ["K-Touch", "T619"],
        "K-Touch W619": ["K-Touch", "W619"],
        "K-Touch W650": ["K-Touch", "W650"],
        W700: ["K-Touch", "W700"],
        W800: ["K-Touch", "W800"],
        W806: ["K-Touch", "W806"],
        W808: ["K-Touch", "W808"],
        W810: ["K-Touch", "W810"],
        X900: ["Lava", "XOLO X900"],
        "Lenovo A798t": ["Lenovo", "A798t"],
        "LENOVO-Lenovo-A288t": ["Lenovo", "LePhone A288"],
        "ThinkPad Tablet": ["Lenovo", "ThinkPad Tablet", "tablet"],
        K1: ["Lenovo", "IdeaPad K1", "tablet"],
        "Ideapad S10-3T": ["Lenovo", "IdeaPad S10-3T", "tablet"],
        "S2005A-H": ["Lenovo", "S2005A"],
        "IdeaTab S2007A-D": ["Lenovo", "IdeaTab S2007A", "tablet"],
        IdeaTabV2007A: ["Lenovo", "IdeaTab V2007A", "tablet"],
        "IdeaTabV2007A-D-I": ["Lenovo", "IdeaTab V2007A", "tablet"],
        IdeaTabV2010A: ["Lenovo", "IdeaTab V2010A", "tablet"],
        "IdeaTab A2107A-H": ["Lenovo", "IdeaTab V2107A", "tablet"],
        "A1 07": ["Lenovo", "LePad", "tablet"],
        "lepad 001b": ["Lenovo", "LePad", "tablet"],
        "lepad 001n": ["Lenovo", "LePad", "tablet"],
        "3GC101": ["Lenovo", "LePhone 3GC101"],
        "Lenovo 3GC101": ["Lenovo", "LePhone 3GC101"],
        "3GW100": ["Lenovo", "LePhone 3GW100"],
        "Lenovo 3GW100": ["Lenovo", "LePhone 3GW100"],
        "3GW101": ["Lenovo", "LePhone 3GW101"],
        "Lenovo 3GW101": ["Lenovo", "LePhone 3GW101"],
        "Lephone 3GW101": ["Lenovo", "LePhone 3GW101"],
        "Lenovo A1-32AB0": ["Lenovo", "LePhone A1-32AB0"],
        "Lenovo S1-37AH0": ["Lenovo", "LePhone S1-37AH0"],
        "S1 37AHO": ["Lenovo", "LePhone S1-37AH0"],
        "Lenovo S2-38AH0": ["Lenovo", "LePhone S2-38AH0"],
        "Lenovo S2-38AT0": ["Lenovo", "LePhone S2-38AT0"],
        "Lenovo A288t": ["Lenovo", "LePhone A288"],
        "Lenovo A366t": ["Lenovo", "LePhone A366"],
        "Lenovo A390e": ["Lenovo", "LePhone A390"],
        "Lenovo A500": ["Lenovo", "LePhone A500"],
        "Lenovo A520": ["Lenovo", "LePhone A520"],
        "Lenovo A560e": ["Lenovo", "A560"],
        "Lenovo A668t": ["Lenovo", "LePhone A668"],
        "Lenovo A698t": ["Lenovo", "LePhone A698"],
        "Lenovo A750": ["Lenovo", "LePhone A750"],
        "Lenovo A780": ["Lenovo", "LePhone A780"],
        "Lenovo A789": ["Lenovo", "LePhone A789"],
        "Lenovo A790e": ["Lenovo", "LePhone A790"],
        "Lenovo P70": ["Lenovo", "LePhone P70"],
        "Lenovo P700": ["Lenovo", "LePhone P700"],
        "Lenovo S850e": ["Lenovo", "S850"],
        "Lenovo S880": ["Lenovo", "S880"],
        "Lenovo K860": ["Lenovo", "K860"],
        A30t: ["Lenovo", "A30t"],
        "Lenovo A60": ["Lenovo", "A60"],
        "Lenovo A65": ["Lenovo", "A65"],
        "Lenovo A66t": ["Lenovo", "A66t"],
        "Lenovo A68e": ["Lenovo", "A68e"],
        "Lenovo K800": ["Lenovo", "K800"],
        "IDEA TV T100": ["Lenovo", "IDEA TV", "television"],
        "IDEA TV K91": ["Lenovo", "IDEA TV", "television"],
        TC970: ["Le Pan", "TC970", "tablet"],
        LePanII: ["Le Pan", "II", "tablet"],
        "LG-C555": ["LG", "Optimus Chat"],
        "LG-C555-parrot": ["LG", "Optimus Chat"],
        "LG-C660h": ["LG", "Optimus Pro"],
        "LG-C729": ["LG", "DoublePlay"],
        "LG-C800G": ["LG", "Eclypse"],
        "LG-CX670": ["LG", "Optimus 3G"],
        "LG-E400": ["LG", "Optimus L3"],
        "LG-E400f": ["LG", "Optimus L3"],
        "LG-E510": ["LG", "Optimus Hub"],
        "LG-E510f": ["LG", "Optimus Hub"],
        "LG-E510g": ["LG", "Optimus Hub"],
        "LG-E610": ["LG", "Optimus L5"],
        "LG-E612": ["LG", "Optimus L5"],
        "LG-E612g": ["LG", "Optimus L5"],
        "LG-E615F": ["LG", "E615"],
        "LG-E617G": ["LG", "E617"],
        "LG-E720": ["LG", "Optimus Chic"],
        "LG-E720b": ["LG", "Optimus Chic"],
        "LG-E730": ["LG", "Optimus Sol"],
        "LG-E970": ["LG", "Shine"],
        "LG-F100L": ["LG", "Optimus Vu"],
        "LG-F100S": ["LG", "Optimus Vu"],
        "LG-F120K": ["LG", "Optimus LTE Tag"],
        "LG-F120L": ["LG", "Optimus LTE Tag"],
        "LG-F120S": ["LG", "Optimus LTE Tag"],
        "LG-F160K": ["LG", "Optimus LTE II"],
        "LG-F160L": ["LG", "Optimus LTE II"],
        "LG-F160S": ["LG", "Optimus LTE II"],
        "LG-F180L": ["LG", "F180L"],
        "LG-GT540": ["LG", "Optimus"],
        "LG-GT540f": ["LG", "Optimus"],
        "LG-GT540 Swift": ["LG", "Optimus"],
        "LG-GW620": ["LG", "GW620"],
        "LG-KH5200": ["LG", "Andro-1"],
        "LG-KU3700": ["LG", "Optimus One"],
        "LG-KU5400": ["LG", "PRADA 3.0"],
        "LG-KU5900": ["LG", "Optimus Black"],
        "LG-L40G": ["LG", "L40G"],
        "LG-LG855": ["LG", "Marquee"],
        "LG-LS670": ["LG", "Optimus S"],
        "LG-LS696": ["LG", "Optimus Elite"],
        "LG-LS840": ["LG", "Viper 4G"],
        "LG-LS855": ["LG", "Marquee"],
        "LG-LS860": ["LG", "'Cayenne'"],
        "LG-LS970": ["LG", "'Eclipse'"],
        "LG-LU3000": ["LG", "Optimus Mach"],
        "LG-LU3100": ["LG", "Optimus Chic"],
        "LG-LU3700": ["LG", "Optimus One"],
        "LG-LU5400": ["LG", "PRADA 3.0"],
        "LG-LU6200": ["LG", "Optimus Q2"],
        "LG-lu6200": ["LG", "Optimus Q2"],
        "LG-LU6500": ["LG", "Optimus Note"],
        "LG-LU6800": ["LG", "Optimus Big"],
        "LG-LU8300": ["LG", "Optimus Pad LTE"],
        "LG-LW690": ["LG", "Optimus C"],
        "LG-LW770": ["LG", "LW770"],
        "LG-MS690": ["LG", "Optimus M"],
        "LG-MS770": ["LG", "MS770"],
        "LG-MS840": ["LG", "Connect 4G"],
        "LG-MS910": ["LG", "Esteem"],
        "LG-MS695": ["LG", "Optimus M+"],
        "LG P350": ["LG", "Optimus Me"],
        "LG-P350": ["LG", "Optimus Me"],
        "LG-P350f": ["LG", "Optimus Me"],
        "LG-P350g": ["LG", "Optimus Me"],
        "LG-P355": ["LG", "P355"],
        "LG-P500": ["LG", "Optimus One"],
        "LG-P500h": ["LG", "Optimus One"],
        "LG-P500h-parrot": ["LG", "Optimus One"],
        "LG-P503": ["LG", "Optimus One"],
        "LG-P504": ["LG", "Optimus One"],
        "LG-P505": ["LG", "Phoenix"],
        "LG-P505R": ["LG", "Phoenix"],
        "LG-P506": ["LG", "Thrive"],
        "LG-P509": ["LG", "Optimus T"],
        "LG-P690": ["LG", "Optimus Net"],
        "LG-P693": ["LG", "P693"],
        "LG-P698": ["LG", "Optimus Net"],
        "LG-P698f": ["LG", "Optimus Net"],
        "LG-P700": ["LG", "Optimus L7"],
        "LG-P705": ["LG", "Optimus L7"],
        "LG-P705f": ["LG", "Optimus L7"],
        "LG-P705g": ["LG", "Optimus L7"],
        "LG-P708g": ["LG", "P708"],
        "LG-P720": ["LG", "Optimus Chic"],
        "LG-P720h": ["LG", "Optimus Chic"],
        "LG-P725": ["LG", "Optimus 3D Max"],
        "LG-P760": ["LG", "P760"],
        "LG-P769": ["LG", "P769"],
        "LG-P860": ["LG", "P860"],
        "LG-P870": ["LG", "P870"],
        "LG-P870F": ["LG", "P870"],
        "LG-P880": ["LG", "X3"],
        "LG-P880g": ["LG", "X3"],
        "LG-P895": ["LG", "P895"],
        "LG-P920": ["LG", "Optimus 3D"],
        "LG-P920h": ["LG", "Optimus 3D"],
        "LG-P925": ["LG", "Thrill"],
        "LG-P925g": ["LG", "Thrill"],
        "LG-P930": ["LG", "Nitro HD"],
        "LG-P936": ["LG", "Optimus LTE"],
        "LG-P940": ["LG", "PRADA 3.0"],
        "LG-P970": ["LG", "Optimus Black"],
        "LG-P970h": ["LG", "Optimus Black"],
        "LG-P990": ["LG", "Optimus 2X Speed"],
        "LG-P990h": ["LG", "Optimus 2X Speed"],
        "LG-P990hN": ["LG", "Optimus 2X Speed"],
        "LG-P990H": ["LG", "Optimus 2X Speed"],
        "LG-P993": ["LG", "Optimus 2X"],
        "LG-SU540": ["LG", "PRADA 3.0"],
        "LG-SU640": ["LG", "Optimus LTE"],
        "LG-SU660": ["LG", "Optimus 2X"],
        "LG-SU760": ["LG", "Optimus 3D"],
        "LG-SU760-Kust": ["LG", "Optimus 3D"],
        "LG-SU870": ["LG", "Optimus 3D Cube"],
        "LG-SU880": ["LG", "Optimus EX"],
        "LG-US670": ["LG", "Optimus U"],
        "LG-US730": ["LG", "US730"],
        "LG-V900": ["LG", "Optimus Pad", "tablet"],
        "LG-V905R": ["LG", "Optimus G-Slate", "tablet"],
        "LG-V909": ["LG", "Optimus G-Slate", "tablet"],
        "LG-VM670": ["LG", "Optimus V"],
        "LG-VM696": ["LG", "Optimus Elite"],
        "LG-VM701": ["LG", "Optimus Slider"],
        "LG-VS660": ["LG", "Vortex"],
        "LG-VS700": ["LG", "Enlighten"],
        "LG-VS740": ["LG", "Ally"],
        "LG-VS840": ["LG", "Connect 4G"],
        "LG-VS910": ["LG", "Revolution"],
        "lgp-970": ["LG", "Optimus Black"],
        E900: ["LG", "Optimus 7"],
        GT540: ["LG", "Optimus GT540"],
        GW620: ["LG", "GW620"],
        KU9500: ["LG", "Optimus Z"],
        LGC660: ["LG", "Optimus Pro"],
        LGL45C: ["LG", "Optimus Net"],
        LGL55C: ["LG", "Optimus Q"],
        LU2300: ["LG", "Optimus Q"],
        LS670: ["LG", "Optimus S"],
        P940: ["LG", "PRADA 3.0"],
        P990: ["LG", "Optimus 2X Speed"],
        "USCC-US730": ["LG", "US730"],
        "USCC-US760": ["LG", "Genesis"],
        VM670: ["LG", "Optimus V"],
        "VS840 4G": ["LG", "Connect 4G"],
        "VS900-4G": ["LG", "VS900"],
        "VS910 4G": ["LG", "Revolution 4G"],
        "VS920 4G": ["LG", "Spectrum 4G"],
        "VS930 4G": ["LG", "VS930"],
        "VS950 4G": ["LG", "VS950"],
        "L-01D": ["LG", "Optimus LTE"],
        "L-02D": ["LG", "PRADA phone"],
        "L-04C": ["LG", "Optimus Chat"],
        "L-05D": ["LG", "Optimus it"],
        "L-06C": ["LG", "Optimus Pad", "tablet"],
        "L-06D": ["LG", "Optimus Vu"],
        "L-07C": ["LG", "Optimus Bright"],
        "LG-Eve": ["LG", "Eve"],
        "LG-Optimus One P500": ["LG", "Optimus One"],
        "LG-Optimus 2X": ["LG", "Optimus 2X"],
        "LG-GT540 Optimus": ["LG", "Optimus"],
        "LG-Optimus Black": ["LG", "Optimus Black"],
        Ally: ["LG", "Ally"],
        Optimus: ["LG", "Optimus"],
        "Optimus Me": ["LG", "Optimus Me"],
        "optimus me p350": ["LG", "Optimus Me"],
        "Optimus 2X": ["LG", "Optimus 2X"],
        "Optimus 2x": ["LG", "Optimus 2X"],
        IS11LG: ["LG", "Optimus X"],
        Vortex: ["LG", "Vortex"],
        "LDK-ICK v1.4": ["LG", "Esteem"],
        T6: ["Malata", "Zpad T6", "tablet"],
        "Malata SMBA1002": ["Malata", "Tablet SMB-A1002", "tablet"],
        STM712HCZ: ["Mediacom", "SmartPad 712c", "tablet"],
        STM803HC: ["Mediacom", "SmartPad 810c", "tablet"],
        "Mediacom 810C": ["Mediacom", "SmartPad 810c", "tablet"],
        Smartpad810c: ["Mediacom", "SmartPad 810c", "tablet"],
        SmartPad810c: ["Mediacom", "SmartPad 810c", "tablet"],
        MP810C: ["Mediacom", "SmartPad 810c", "tablet"],
        MP907C: ["Mediacom", "SmartPad 907c", "tablet"],
        MTK6516: ["Mediatek", "MTK6516"],
        "LIFETAB S9512": ["Medion", "Lifetab S9512", "tablet"],
        "LIFETAB P9514": ["Medion", "Lifetab P9514", "tablet"],
        "MD LIFETAB P9516": ["Medion", "Lifetab P9516", "tablet"],
        "MEDION LIFE P4310": ["Medion", "Life P4310"],
        M8: ["Meizu", "M8"],
        M9: ["Meizu", "M9"],
        M040: ["Meizu", "M040"],
        "M9-unlocked": ["Meizu", "M9"],
        "meizu m9": ["Meizu", "M9"],
        "MEIZU M9": ["Meizu", "M9"],
        "MEIZU MX": ["Meizu", "MX"],
        M030: ["Meizu", "MX M030"],
        M031: ["Meizu", "MX M031"],
        M032: ["Meizu", "MX M032"],
        Slidepad: ["Memup", "Slidepad", "tablet"],
        A45: ["Micromax", "A45 Punk"],
        "Micromax A50": ["Micromax", "A50 Ninja"],
        "Micromax A60": ["Micromax", "Andro A60"],
        "Micromax A70": ["Micromax", "Andro A70"],
        "P300(Funbook)": ["Micromax", "Funbook P300", "tablet"],
        AT735: ["Moinstone", "AT735", "tablet"],
        A853: ["Motorola", "Milestone"],
        A953: ["Motorola", "Milestone 2"],
        A1680: ["Motorola", "MOTO A1680"],
        ET1: ["Motorola", "ET1 Enterprise Tablet", "tablet"],
        MB200: ["Motorola", "CLIQ"],
        MB300: ["Motorola", "BACKFLIP"],
        MB501: ["Motorola", "CLIQ XT"],
        MB502: ["Motorola", "CHARM"],
        MB511: ["Motorola", "FLIPOUT"],
        MB520: ["Motorola", "BRAVO"],
        MB525: ["Motorola", "DEFY"],
        "MB525+": ["Motorola", "DEFY"],
        "MB525 for me": ["Motorola", "DEFY"],
        MB526: ["Motorola", "DEFY+"],
        MB611: ["Motorola", "CLIQ 2"],
        MB612: ["Motorola", "XPRT"],
        MB632: ["Motorola", "PRO+"],
        MB855: ["Motorola", "PHOTON 4G"],
        MB860: ["Motorola", "ATRIX"],
        MB861: ["Motorola", "ATRIX"],
        mb861: ["Motorola", "ATRIX"],
        MB865: ["Motorola", "ATRIX 2"],
        MB870: ["Motorola", "Droid X2"],
        MB886: ["Motorola", "DINARA"],
        ME501: ["Motorola", "CLIQ XT"],
        ME511: ["Motorola", "FLIPOUT"],
        me525: ["Motorola", "MOTO ME525"],
        Me525: ["Motorola", "MOTO ME525"],
        ME525: ["Motorola", "MOTO ME525"],
        "ME525+": ["Motorola", "MOTO ME525"],
        ME600: ["Motorola", "BACKFLIP"],
        ME632: ["Motorola", "PRO+"],
        ME722: ["Motorola", "Milestone 2"],
        ME811: ["Motorola", "Droid X"],
        ME860: ["Motorola", "ATRIX"],
        ME863: ["Motorola", "Milestone 3"],
        ME865: ["Motorola", "ATRIX 2"],
        MT620: ["Motorola", "MOTO MT620"],
        MT620t: ["Motorola", "MOTO MT620"],
        MT716: ["Motorola", "MOTO MT716"],
        MT810: ["Motorola", "MOTO MT810"],
        MT870: ["Motorola", "MOTO MT870"],
        MT917: ["Motorola", "MT917"],
        MZ505: ["Motorola", "XOOM Family Edition", "tablet"],
        MZ600: ["Motorola", "XOOM 4G LTE", "tablet"],
        MZ601: ["Motorola", "XOOM 3G", "tablet"],
        MZ602: ["Motorola", "XOOM 4G LTE", "tablet"],
        MZ603: ["Motorola", "XOOM 3G", "tablet"],
        MZ604: ["Motorola", "XOOM WiFi", "tablet"],
        MZ605: ["Motorola", "XOOM 3G", "tablet"],
        MZ606: ["Motorola", "XOOM WiFi", "tablet"],
        MZ607: ["Motorola", "XOOM 2 WiFi Media Edition", "tablet"],
        MZ609: ["Motorola", "Droid XYBOARD 8.2", "tablet"],
        "MZ609 4G": ["Motorola", "Droid XYBOARD 8.2", "tablet"],
        MZ615: ["Motorola", "XOOM 2 WiFi", "tablet"],
        MZ617: ["Motorola", "Droid XYBOARD 10.1", "tablet"],
        "MZ617 4G": ["Motorola", "Droid XYBOARD 10.1", "tablet"],
        WX435: ["Motorola", "TRIUMPH WX435"],
        WX445: ["Motorola", "CITRUS WX445"],
        XT300: ["Motorola", "SPICE"],
        XT301: ["Motorola", "MOTO XT301"],
        XT311: ["Motorola", "FIRE"],
        XT316: ["Motorola", "MOTO XT316"],
        XT319: ["Motorola", "MOTO XT319"],
        XT390: ["Motorola", "MOTO XT390"],
        XT320: ["Motorola", "DEFY Mini"],
        XT321: ["Motorola", "DEFY Mini"],
        XT500: ["Motorola", "MOTO XT500"],
        "xt-500": ["Motorola", "MOTO XT500"],
        XT502: ["Motorola", "QUENCH XT5"],
        XT530: ["Motorola", "FIRE XT"],
        XT531: ["Motorola", "FIRE XT"],
        XT532: ["Motorola", "XT532"],
        XT535: ["Motorola", "DEFY"],
        XT550: ["Motorola", "XT550"],
        XT556: ["Motorola", "XT556"],
        XT603: ["Motorola", "ADMIRAL"],
        XT610: ["Motorola", "Droid Pro"],
        XT615: ["Motorola", "MOTO XT615"],
        XT626: ["Motorola", "MOTO XT626"],
        XT681: ["Motorola", "MOTO XT681"],
        XT682: ["Motorola", "Droid 3"],
        XT685: ["Motorola", "MOTO XT685"],
        XT687: ["Motorola", "ATRIX TV"],
        XT701: ["Motorola", "XT701"],
        XT702: ["Motorola", "MOTO XT702"],
        XT711: ["Motorola", "MOTO XT711"],
        XT720: ["Motorola", "Milestone"],
        XT875: ["Motorola", "Droid Bionic"],
        XT800: ["Motorola", "MOTO XT800"],
        "XT800+": ["Motorola", "MOTO XT800"],
        XT800W: ["Motorola", "MOTO Glam"],
        XT806: ["Motorola", "MOTO XT806"],
        XT860: ["Motorola", "Milestone 3"],
        XT862: ["Motorola", "Droid 3"],
        XT882: ["Motorola", "MOTO XT882"],
        XT883: ["Motorola", "Milestone 3"],
        XT889: ["Motorola", "XT889"],
        XT897: ["Motorola", "Droid 4"],
        XT901: ["Motorola", "RAZR"],
        XT910: ["Motorola", "RAZR"],
        XT910K: ["Motorola", "RAZR"],
        XT910S: ["Motorola", "RAZR"],
        "XT910 4G": ["Motorola", "RAZR"],
        XT912: ["Motorola", "Droid RAZR"],
        XT923: ["Motorola", "Droid RAZR HD"],
        XT925: ["Motorola", "Droid RAZR HD"],
        XT926: ["Motorola", "Droid RAZR"],
        "XT926 4G": ["Motorola", "Droid RAZR"],
        XT928: ["Motorola", "XT928"],
        "Atrix 2": ["Motorola", "ATRIX 2"],
        "Atrix 4g": ["Motorola", "ATRIX 4G"],
        "Atrix 4G": ["Motorola", "ATRIX 4G"],
        "Atrix 4G ME860": ["Motorola", "ATRIX 4G"],
        CLIQ: ["Motorola", "CLIQ"],
        "CLIQ XT": ["Motorola", "CLIQ XT"],
        CLIQ2: ["Motorola", "CLIQ 2"],
        Corvair: ["Motorola", "Corvair", "tablet"],
        DEFY: ["Motorola", "DEFY"],
        "Defy+": ["Motorola", "DEFY+"],
        "Defy Plus": ["Motorola", "DEFY+"],
        Devour: ["Motorola", "Devour"],
        Dext: ["Motorola", "Dext"],
        Droid: ["Motorola", "Droid"],
        DROID: ["Motorola", "Droid"],
        DROID2: ["Motorola", "Droid 2"],
        "DROID2 GLOBAL": ["Motorola", "Droid 2"],
        "DROID2 Global": ["Motorola", "Droid 2"],
        Droid2Global: ["Motorola", "Droid 2"],
        "DROID 2": ["Motorola", "Droid 2"],
        DROID3: ["Motorola", "Droid 3"],
        DROID4: ["Motorola", "Droid 4"],
        "DROID4 4G": ["Motorola", "Droid 4"],
        "DROID Pro": ["Motorola", "Droid Pro"],
        "DROID BIONIC": ["Motorola", "Droid Bionic"],
        "DROID BIONIC 4G": ["Motorola", "Droid Bionic"],
        "DROID BIONIC XT875 4G": ["Motorola", "Droid Bionic"],
        DROIDRAZR: ["Motorola", "Droid RAZR"],
        "Droid Razr": ["Motorola", "Droid RAZR"],
        "DROID RAZR": ["Motorola", "Droid RAZR"],
        "DROID RAZR 4G": ["Motorola", "Droid RAZR"],
        "DROID SPYDER": ["Motorola", "Droid RAZR"],
        "DROID RAZR HD": ["Motorola", "Droid RAZR HD"],
        "DROID RAZR HD 4G": ["Motorola", "Droid RAZR HD"],
        DroidX: ["Motorola", "Droid X"],
        DROIDX: ["Motorola", "Droid X"],
        "droid x": ["Motorola", "Droid X"],
        "Droid X": ["Motorola", "Droid X"],
        "DROID X": ["Motorola", "Droid X"],
        "DROID X2": ["Motorola", "Droid X2"],
        Electrify: ["Motorola", "Electrify"],
        "Milestone XT720": ["Motorola", "Milestone"],
        "Milestone Xt720": ["Motorola", "Milestone"],
        Milestone: ["Motorola", "Milestone"],
        "A853 Milestone": ["Motorola", "Milestone"],
        "Milestone X": ["Motorola", "Milestone X"],
        "Milestone X2": ["Motorola", "Milestone X2"],
        MotoroiX: ["Motorola", "Droid X"],
        "Moto Backflip": ["Motorola", "BACKFLIP"],
        RAZR: ["Motorola", "RAZR"],
        Triumph: ["Motorola", "TRIUMPH"],
        "Opus One": ["Motorola", "i1"],
        Photon: ["Motorola", "PHOTON"],
        "Photon 4G": ["Motorola", "PHOTON 4G"],
        XOOM: ["Motorola", "XOOM", "tablet"],
        Xoom: ["Motorola", "XOOM", "tablet"],
        "XOOM 2": ["Motorola", "XOOM 2", "tablet"],
        "XOOM 2 ME": ["Motorola", "XOOM 2", "tablet"],
        "XOOM MZ606": ["Motorola", "XOOM WiFi", "tablet"],
        ISW11M: ["Motorola", "PHOTON"],
        IS12M: ["Motorola", "RAZR"],
        MOTWX435KT: ["Motorola", "TRIUMPH"],
        "X3-Ice MIUI XT720 Memorila Classics": ["Motorola", "Milestone"],
        "NABI-A": ["Nabi", "Kids tablet", "tablet"],
        Newpad: ["Newsmy", "Newpad", "tablet"],
        "Newpad-K97": ["Newsmy", "Newpad K97", "tablet"],
        "Newpad P9": ["Newsmy", "Newpad P9", "tablet"],
        "M-PAD N8": ["Newsmy", "M-pad N8", "tablet"],
        "LT-NA7": ["NEC", "LT-NA7"],
        "N-01D": ["NEC", "MEDIAS PP N-01D"],
        "N-04C": ["NEC", "MEDIAS N-04C"],
        "N-04D": ["NEC", "MEDIAS LTE N-04D"],
        "N-05D": ["NEC", "MEDIAS ES N-05D"],
        "N-06C": ["NEC", "MEDIAS WP N-06C"],
        "N-06D": ["NEC", "MEDIAS Tab N-06D", "tablet"],
        "N-07D": ["NEC", "MEDIAS X N-07D"],
        "101N": ["NEC", "MEDIAS CH Softbank 101N"],
        IS11N: ["NEC", "MEDIAS BR IS11N"],
        "Nexian NX-A890": ["Nexian", "Journey"],
        "NX-A891": ["Nexian", "Ultra Journey"],
        M726HC: ["Nextbook", "Premium 7", "ereader"],
        NXM726HN: ["Nextbook", "Premium 7", "ereader"],
        NXM803HD: ["Nextbook", "Premium 8", "ereader"],
        DATAM803HC: ["Nextbook", "Premium 8", "ereader"],
        NXM901: ["Nextbook", "Next 3", "ereader"],
        "NGM Vanity Smart": ["NGM", "Vanity Smart"],
        "Nokia N9": ["Nokia", "N9"],
        "Nokia N900": ["Nokia", "N900"],
        Lumia800: ["Nokia", "Lumia 800"],
        "Lumia 900": ["Nokia", "Lumia 900"],
        "Notion Ink ADAM": ["Notion Ink", "ADAM", "tablet"],
        "P4D SIRIUS": ["Nvsbl", "P4D SIRIUS", "tablet"],
        "P4D Sirius": ["Nvsbl", "P4D SIRIUS", "tablet"],
        EFM710A: ["Oblio", "Mint 7x", "tablet"],
        "ODYS-Xpress": ["Odys", "Xpress", "tablet"],
        "Olivetti Olipad 100": ["Olivetti", "Olipad 100", "tablet"],
        OP110: ["Olivetti", "Olipad 110", "tablet"],
        "ONDA MID": ["Onda", "MID", "tablet"],
        VX580A: ["Onda", "VX580A", "tablet"],
        VX610A: ["Onda", "VX610A", "tablet"],
        TQ150: ["Onda", "TQ150"],
        N2T: ["ONN", "N2T", "tablet"],
        Renesas: ["Opad", "Renesas", "tablet"],
        "renesas emev": ["Opad", "Renesas", "tablet"],
        X903: ["Oppo", "Find Me X903"],
        X905: ["Oppo", "Find 3 X905"],
        R805: ["Oppo", "R805"],
        R801: ["Oppo", "R801"],
        R811: ["Oppo", "R811"],
        X909: ["Oppo", "X909"],
        OPPOR801: ["Oppo", "R801"],
        OPPOX905: ["Oppo", "Find 3 X905"],
        OPPOX907: ["Oppo", "Find 3 X907"],
        X907: ["Oppo", "Find 3 X907"],
        X9015: ["Oppo", "Find X9015"],
        OPPOX9017: ["Oppo", "Finder X9017"],
        OPPOU701: ["Oppo", "OPPOU701"],
        OPPOR807: ["Oppo", "Real R807"],
        OPPOR805: ["Oppo", "Real R805"],
        R807: ["Oppo", "Real R807"],
        OPPOT703: ["Oppo", "T703"],
        "P-01D": ["Panasonic", "P-01D"],
        "P-02D": ["Panasonic", "Lumix Phone"],
        "P-04D": ["Panasonic", "Eluga"],
        "P-07C": ["Panasonic", "P-07C"],
        dL1: ["Panasonic", "Eluga dL1"],
        "101P": ["Panasonic", "Lumix Phone"],
        "JT-H580VT": ["Panasonic", "BizPad 7", "tablet"],
        "JT-H581VT": ["Panasonic", "BizPad 10", "tablet"],
        "FZ-A1A": ["Panasonic", "Toughpad", "tablet"],
        pandigital9hr: ["Pandigital", "9HR", "tablet"],
        pandigital9hr2: ["Pandigital", "9HR2", "tablet"],
        pandigitalopc1: ["Pandigital", "OPC1", "tablet"],
        pandigitalopp1: ["Pandigital", "OPP1", "tablet"],
        pandigitalp1hr: ["Pandigital", "p1hr", "tablet"],
        "IM-A600S": ["Pantech", "SIRIUS \u00c3\ufffd\u00c2\u00b1"],
        "IM-A630K": ["Pantech", "SKY Izar"],
        "IM-A690L": ["Pantech", "SKY"],
        "IM-A690S": ["Pantech", "SKY"],
        "IM-A710K": ["Pantech", "SKY Vega Xpress"],
        "IM-A720L": ["Pantech", "SKY Vega Xpress"],
        "IM-A725L": ["Pantech", "SKY Vega X+"],
        "IM-A730s": ["Pantech", "SKY Vega S"],
        "IM-A730S": ["Pantech", "SKY Vega S"],
        "IM-A750K": ["Pantech", "SKY Mirach A"],
        "IM-A760S": ["Pantech", "SKY Vega Racer"],
        "IM-A770K": ["Pantech", "SKY Vega Racer"],
        "IM-A780L": ["Pantech", "SKY Vega Racer"],
        "IM-A800S": ["Pantech", "SKY Vega LTE"],
        "IM-A810K": ["Pantech", "SKY Vega LTE M"],
        "IM-A810S": ["Pantech", "SKY Vega LTE M"],
        "IM-A820L": ["Pantech", "SKY Vega LTE EX"],
        "IM-A830K": ["Pantech", "SKY Vega Racer 2"],
        "IM-A830L": ["Pantech", "SKY Vega Racer 2"],
        "IM-A830S": ["Pantech", "SKY Vega Racer 2"],
        "IM-A840S": ["Pantech", "SKY Vega S5"],
        "IM-A850K": ["Pantech", "IM-A850K"],
        "IM-T100K": ["Pantech", "SKY Vega No. 5", "tablet"],
        IS06: ["Pantech", "SIRIUS \u00c3\ufffd\u00c2\u00b1"],
        ADR8995: ["Pantech", "Breakout"],
        "ADR8995 4G": ["Pantech", "Breakout"],
        "ADR910L 4G": ["Pantech", "ADR910L"],
        PantechP4100: ["Pantech", "Element", "tablet"],
        PantechP8000: ["Pantech", "Crossover"],
        PantechP8010: ["Pantech", "P8010"],
        PantechP9060: ["Pantech", "Pocket"],
        PantechP9070: ["Pantech", "Burst"],
        "SKY IM-A600S": ["Pantech", "SIRIUS \u00c3\ufffd\u00c2\u00b1"],
        "SKY IM-A630K": ["Pantech", "SKY Izar"],
        "SKY IM-A650S": ["Pantech", "SKY Vega"],
        IS11PT: ["Pantech", "Mirach IS11PT"],
        PAT712W: ["Perfeo", "PAT712W", "tablet"],
        X7G: ["Pearl", "Touchlet X7G", "tablet"],
        FWS810: ["PHICOMM", "FWS810"],
        "Philips PI5000": ["Philips", "PI5000", "tablet"],
        PI7000: ["Philips", "PI7000", "tablet"],
        "Philips W626": ["Philips", "W626"],
        "Philips W632": ["Philips", "W632"],
        MOMO: ["Ployer", "MOMO", "tablet"],
        MOMO15: ["Ployer", "MOMO15", "tablet"],
        "PocketBook A7": ["PocketBook", "A7", "tablet"],
        "PocketBook A10": ["PocketBook", "A10", "tablet"],
        "Mobii 7": ["Point Of View", "Mobii 7", "tablet"],
        PMP3384BRU: ["Prestigio", "Multipad 3384", "tablet"],
        TB07FTA: ["Positivo", "TB07FTA", "tablet"],
        "QW TB-1207": ["Qware", "Pro3", "tablet"],
        "W6HD ICS": ["Ramos", "W6HD", "tablet"],
        w10: ["Ramos", "W10", "tablet"],
        W10: ["Ramos", "W10", "tablet"],
        "w10 v2.0": ["Ramos", "W10 v2.0", "tablet"],
        "W10 V2.0": ["Ramos", "W10 v2.0", "tablet"],
        T11AD: ["Ramos", "T11AD", "tablet"],
        "T11AD.FE": ["Ramos", "T11AD", "tablet"],
        PlayBook: ["RIM", "BlackBerry PlayBook", "tablet"],
        "RBK-490": ["Ritmix", "RBK-490", "tablet"],
        A8HD: ["Saayi", "Dropad A8HD", "tablet"],
        "GT-S7568": ["Samsung", "S7568"],
        "Galaxy Nexus": ["Samsung", "Galaxy Nexus"],
        "GT-B5330": ["Samsung", "GT-B5330"],
        "GT-B5510": ["Samsung", "Galaxy Y Pro"],
        "GT-B5510B": ["Samsung", "Galaxy Y Pro"],
        "GT-B5510L": ["Samsung", "Galaxy Y Pro"],
        "GT-B5512": ["Samsung", "Galaxy Y Pro Duos"],
        "GT-B7510": ["Samsung", "Galaxy Pro"],
        "GT-B7510L": ["Samsung", "Galaxy Pro"],
        "GT-I5500": ["Samsung", "Galaxy 5"],
        "GT-I5500B": ["Samsung", "Galaxy 5"],
        "GT-I5500L": ["Samsung", "Galaxy 5"],
        "GT-I5500M": ["Samsung", "Galaxy 5"],
        "GT-I5500-MR3": ["Samsung", "Galaxy 5"],
        "GT-I5503": ["Samsung", "Galaxy 5"],
        "GT-I5508": ["Samsung", "Galaxy 5"],
        "GT-I5510": ["Samsung", "Galaxy 551"],
        "GT-I5510L": ["Samsung", "Galaxy 551"],
        "GT-I5510M": ["Samsung", "Galaxy 551"],
        "GT-I5510T": ["Samsung", "Galaxy 551"],
        "GT-I5700": ["Samsung", "Galaxy Spica"],
        "GT-I5700L": ["Samsung", "Galaxy Spica"],
        "GT-I5800": ["Samsung", "Galaxy Apollo"],
        "GT-I5800D": ["Samsung", "Galaxy Apollo"],
        "GT-I5800L": ["Samsung", "Galaxy Apollo"],
        "GT-I5801": ["Samsung", "Galaxy Apollo"],
        "GT-I6500U": ["Samsung", "Saturn"],
        "GT-I8000": ["Samsung", "Omnia 2"],
        "GT-I8150": ["Samsung", "Galaxy W"],
        "GT-I8150B": ["Samsung", "Galaxy W"],
        "GT-I8160": ["Samsung", "Galaxy Ace 2"],
        "GT-I8160L": ["Samsung", "Galaxy Ace 2"],
        "GT-I8160P": ["Samsung", "Galaxy Ace 2"],
        "GT-I8320": ["Samsung", "H1"],
        "GT-I8520": ["Samsung", "Galaxy Beam"],
        "GT-I8530": ["Samsung", "Galaxy Beam"],
        "GT-I8250": ["Samsung", "Galaxy Beam"],
        "GT-i9000": ["Samsung", "Galaxy S"],
        "GT-I9000": ["Samsung", "Galaxy S"],
        "GT-I9000B": ["Samsung", "Galaxy S"],
        "GT-I9000M": ["Samsung", "Galaxy S Vibrant"],
        "GT-I9000T": ["Samsung", "Galaxy S"],
        "GT-I9001": ["Samsung", "Galaxy S Plus"],
        "GT-I9003": ["Samsung", "Galaxy SL"],
        "GT-I9003L": ["Samsung", "Galaxy SL"],
        "GT-I9008": ["Samsung", "Galaxy S"],
        "GT-I9008L": ["Samsung", "Galaxy S"],
        "GT-I9010": ["Samsung", "Galaxy S Giorgio Armani"],
        "GT-I9018": ["Samsung", "Galaxy GT-I9018"],
        "GT-I9070": ["Samsung", "Galaxy S Advance"],
        "GT-I9070P": ["Samsung", "Galaxy S Advance"],
        "GT-I9082": ["Samsung", "Galaxy Grand DUOS"],
        "GT-I9088": ["Samsung", "Galaxy S"],
        "GT-i9100": ["Samsung", "Galaxy S II"],
        "GT-I9100": ["Samsung", "Galaxy S II"],
        "GT-I9100G": ["Samsung", "Galaxy S II"],
        "GT-I9100M": ["Samsung", "Galaxy S II"],
        "GT-I9100T": ["Samsung", "Galaxy S II"],
        "GT-I9100P": ["Samsung", "Galaxy S II"],
        "GT-I9103": ["Samsung", "Galaxy R"],
        "GT-I9108": ["Samsung", "Galaxy S II"],
        "GT-I9210": ["Samsung", "Galaxy S II LTE"],
        "GT-I9210T": ["Samsung", "Galaxy S II LTE"],
        "GT-I9220": ["Samsung", "Galaxy Note"],
        "GT-I9228": ["Samsung", "Galaxy Note"],
        "GT-I9250": ["Samsung", "Galaxy Nexus"],
        "GT-I9250 EUR XX": ["Samsung", "Galaxy Nexus"],
        "GT-I9260": ["Samsung", "Galaxy Premier"],
        "GT-I9300": ["Samsung", "Galaxy S III"],
        "GT-I9300T": ["Samsung", "Galaxy S III"],
        "GT-I9303T": ["Samsung", "Galaxy S III"],
        "GT-I9308": ["Samsung", "Galaxy S III"],
        "GT-I9500": ["Samsung", "Galaxy GT-I9500"],
        "GT-I9800": ["Samsung", "Galaxy GT-I9800"],
        "GT-N7000": ["Samsung", "Galaxy Note"],
        "GT-N7000B": ["Samsung", "Galaxy Note"],
        "GT-N7100": ["Samsung", "Galaxy Note II"],
        "GT-N7102": ["Samsung", "Galaxy Note II"],
        "GT-N8000": ["Samsung", "Galaxy Note 10.1"],
        "GT-N8010": ["Samsung", "Galaxy Note 10.1"],
        "GT-P1000": ["Samsung", "Galaxy Tab", "tablet"],
        "GT-P1000L": ["Samsung", "Galaxy Tab", "tablet"],
        "GT-P1000M": ["Samsung", "Galaxy Tab", "tablet"],
        "GT-P1000N": ["Samsung", "Galaxy Tab", "tablet"],
        "GT-P1000T": ["Samsung", "Galaxy Tab", "tablet"],
        "GT-P1000 Tablet": ["Samsung", "Galaxy Tab", "tablet"],
        "GT-P1010": ["Samsung", "Galaxy Tab", "tablet"],
        "GT-P3100": ["Samsung", "Galaxy Tab 2 (7.0)", "tablet"],
        "GT-P3100B": ["Samsung", "Galaxy Tab 2 (7.0)", "tablet"],
        "GT-P3110": ["Samsung", "Galaxy Tab 2 (7.0)", "tablet"],
        "GT-P3113": ["Samsung", "Galaxy Tab 2 (7.0)", "tablet"],
        "GT-P5100": ["Samsung", "Galaxy Tab 2 (10.1)", "tablet"],
        "GT-P5110": ["Samsung", "Galaxy Tab 2 (10.1)", "tablet"],
        "GT-P5113": ["Samsung", "Galaxy Tab 2 (10.1)", "tablet"],
        "GT-P6200": ["Samsung", "Galaxy Tab 7.0 Plus", "tablet"],
        "GT-P6200L": ["Samsung", "Galaxy Tab 7.0 Plus", "tablet"],
        "GT-P6201": ["Samsung", "Galaxy Tab 7.0 Plus N", "tablet"],
        "GT-P6210": ["Samsung", "Galaxy Tab 7.0 Plus", "tablet"],
        "GT-P6211": ["Samsung", "Galaxy Tab 7.0 Plus N", "tablet"],
        "GT-P6800": ["Samsung", "Galaxy Tab 7.7", "tablet"],
        "GT-P6810": ["Samsung", "Galaxy Tab 7.7", "tablet"],
        "GT-P7100": ["Samsung", "Galaxy Tab 10.1V", "tablet"],
        "GT-P7300": ["Samsung", "Galaxy Tab 8.9", "tablet"],
        "GT-P7300B": ["Samsung", "Galaxy Tab 8.9", "tablet"],
        "GT-P7310": ["Samsung", "Galaxy Tab 8.9", "tablet"],
        "GT-P7320": ["Samsung", "Galaxy Tab 8.9", "tablet"],
        "GT-P7320T": ["Samsung", "Galaxy Tab 8.9", "tablet"],
        "GT-P7500": ["Samsung", "Galaxy Tab 10.1", "tablet"],
        "GT-P7500D": ["Samsung", "Galaxy Tab 10.1", "tablet"],
        "GT-P7500R": ["Samsung", "Galaxy Tab 10.1", "tablet"],
        "GT-P7500V": ["Samsung", "Galaxy Tab 10.1", "tablet"],
        "GT-P7501": ["Samsung", "Galaxy Tab 10.1N", "tablet"],
        "GT-P7510": ["Samsung", "Galaxy Tab 10.1", "tablet"],
        "GT-P7511": ["Samsung", "Galaxy Tab 10.1N", "tablet"],
        "GT-S5300": ["Samsung", "Galaxy Pocket"],
        "GT-S5360": ["Samsung", "Galaxy Y"],
        "GT-S5360B": ["Samsung", "Galaxy Y"],
        "GT-S5360L": ["Samsung", "Galaxy Y"],
        "GT-S5363": ["Samsung", "Galaxy Y"],
        "GT-S5367": ["Samsung", "Galaxy Y TV"],
        "GT-S5368": ["Samsung", "GT-S5368"],
        "GT-S5369": ["Samsung", "Galaxy Y"],
        "GT-S5570": ["Samsung", "Galaxy Mini"],
        "GT-S5570B": ["Samsung", "Galaxy Mini"],
        "GT-S5570I": ["Samsung", "Galaxy Mini"],
        "GT-S5570L": ["Samsung", "Galaxy Mini"],
        "GT-S5578": ["Samsung", "Galaxy Mini"],
        "GT-S5660": ["Samsung", "Galaxy Gio"],
        "GT-S5660M": ["Samsung", "Galaxy Gio"],
        "GT-S5660V": ["Samsung", "Galaxy Gio"],
        "GT-S5670": ["Samsung", "Galaxy Fit"],
        "GT-S5670B": ["Samsung", "Galaxy Fit"],
        "GT-S5670L": ["Samsung", "Galaxy Fit"],
        "GT-S5690": ["Samsung", "Galaxy Xcover"],
        "GT-S5690L": ["Samsung", "Galaxy Xcover"],
        "GT-S5820": ["Samsung", "Galaxy Ace"],
        "GT-S5830": ["Samsung", "Galaxy Ace"],
        "GT-S5830B": ["Samsung", "Galaxy Ace"],
        "GT-S5830C": ["Samsung", "Galaxy Ace"],
        "GT-S5830D": ["Samsung", "Galaxy Ace"],
        "GT-S5830D-parrot": ["Samsung", "Galaxy Ace"],
        "GT-S5830i": ["Samsung", "Galaxy Ace"],
        "GT-S5830L": ["Samsung", "Galaxy Ace"],
        "GT-S5830M": ["Samsung", "Galaxy Ace"],
        "GT-S5830T": ["Samsung", "Galaxy Ace"],
        "GT-S5838": ["Samsung", "Galaxy Ace"],
        "GT-S5839i": ["Samsung", "Galaxy Ace"],
        "GT-S6102": ["Samsung", "Galaxy Y Duos"],
        "GT-S6102B": ["Samsung", "Galaxy Y Duos"],
        "GT-S6500": ["Samsung", "Galaxy Mini 2"],
        "GT-S6500D": ["Samsung", "Galaxy Mini 2"],
        "GT-S6702": ["Samsung", "GT-S6702"],
        "GT-S6802": ["Samsung", "Galaxy Ace Duos"],
        "GT-S7500": ["Samsung", "Galaxy Ace Plus"],
        "GT-S7500L": ["Samsung", "Galaxy Ace Plus"],
        "GT-S7500W": ["Samsung", "Galaxy Ace Plus"],
        "GT-T959": ["Samsung", "Galaxy S Vibrant"],
        "SCH-i509": ["Samsung", "Galaxy Y"],
        "SCH-i559": ["Samsung", "Galaxy Pop"],
        "SCH-i569": ["Samsung", "Galaxy Gio"],
        "SCH-i579": ["Samsung", "Galaxy Ace"],
        "SCH-i589": ["Samsung", "Galaxy Ace Duos"],
        "SCH-i705 4G": ["Samsung", "Galaxy Tab 2 (7.0)", "tablet"],
        "SCH-i809": ["Samsung", "SCH-i809"],
        "SCH-i889": ["Samsung", "Galaxy Note"],
        "SCH-i909": ["Samsung", "Galaxy S"],
        "SCH-i919": ["Samsung", "SCH-i919"],
        "SCH-i929": ["Samsung", "SCH-i929"],
        "SCH-I100": ["Samsung", "Gem"],
        "SCH-I110": ["Samsung", "Illusion"],
        "SCH-I400": ["Samsung", "Continuum"],
        "SCH-I405": ["Samsung", "Stratosphere"],
        "SCH-I405 4G": ["Samsung", "Stratosphere"],
        "SCH-I500": ["Samsung", "Fascinate"],
        "SCH-I510": ["Samsung", "Stealth V"],
        "SCH-I510 4G": ["Samsung", "Droid Charge"],
        "SCH-I515": ["Samsung", "Galaxy Nexus"],
        "SCH-I535": ["Samsung", "Galaxy S III"],
        "SCH-I535 4G": ["Samsung", "Galaxy S III"],
        "SCH-I619": ["Samsung", "SCH-I619"],
        "SCH-I699": ["Samsung", "SCH-I699"],
        "SCH-I779": ["Samsung", "SCH-I779"],
        "SCH-I800": ["Samsung", "Galaxy Tab 7.0", "tablet"],
        "SCH-I815": ["Samsung", "Galaxy Tab 7.7", "tablet"],
        "SCH-I815 4G": ["Samsung", "Galaxy Tab 7.7", "tablet"],
        "SCH-I905": ["Samsung", "Galaxy Tab 10.1", "tablet"],
        "SCH-I905 4G": ["Samsung", "Galaxy Tab 10.1", "tablet"],
        "SCH-I909": ["Samsung", "Galaxy S"],
        "SCH-I915": ["Samsung", "SCH-I915"],
        "SCH-I939": ["Samsung", "Galaxy S III"],
        "SCH-M828C": ["Samsung", "Galaxy Precedent"],
        "SCH-M828Carray(9096483449)": ["Samsung", "Galaxy Precedent"],
        "SCH-R530U": ["Samsung", "Galaxy S III"],
        "SCH-R680": ["Samsung", "Repp"],
        "SCH-R720": ["Samsung", "Admire"],
        "SCH-R730": ["Samsung", "Transfix"],
        "SCH-R760": ["Samsung", "Galaxy S II"],
        "SCH-R820": ["Samsung", "SCH-R820"],
        "SCH-R880": ["Samsung", "Acclaim"],
        "SCH-R910": ["Samsung", "Galaxy Indulge 4G"],
        "SCH-R915": ["Samsung", "Galaxy Indulge"],
        "SCH-R920": ["Samsung", "Galaxy Attain 4G"],
        "SCH-R930": ["Samsung", "Galaxy S Aviator"],
        "SCH-R940": ["Samsung", "Galaxy S Lightray"],
        "SCH-S720C": ["Samsung", "Galaxy Proclaim"],
        "SCH-S735C": ["Samsung", "SCH-S735"],
        "SCH-W899": ["Samsung", "SCH-W899"],
        "SCH-W999": ["Samsung", "SCH-W999"],
        "SGH-I547": ["Samsung", "SGH-I547"],
        "SGH-I717": ["Samsung", "Galaxy Note"],
        "SGH-I717D": ["Samsung", "Galaxy Note"],
        "SGH-I717M": ["Samsung", "Galaxy Note"],
        "SGH-I717R": ["Samsung", "Galaxy Note"],
        "SGH-I727": ["Samsung", "Galaxy S II Skyrocket"],
        "SGH-i727R": ["Samsung", "Galaxy S II"],
        "SGH-I727R": ["Samsung", "Galaxy S II"],
        "SGH-I747": ["Samsung", "Galaxy S III"],
        "SGH-I747M": ["Samsung", "Galaxy S III"],
        "SGH-I748": ["Samsung", "Galaxy S III"],
        "SGH-I757": ["Samsung", "Galaxy S II Skyrocket HD"],
        "SGH-I777": ["Samsung", "Galaxy S II"],
        "SGH-I9777": ["Samsung", "Galaxy S II"],
        "SGH-I896": ["Samsung", "Captivate"],
        "SGH-I897": ["Samsung", "Captivate"],
        "SGH-I927": ["Samsung", "Captivate Glide"],
        "SGH-I927R": ["Samsung", "Captivate Glide"],
        "SGH-I957": ["Samsung", "Galaxy Tab 8.9", "tablet"],
        "SGH-I957D": ["Samsung", "Galaxy Tab 8.9", "tablet"],
        "SGH-I957M": ["Samsung", "Galaxy Tab 8.9", "tablet"],
        "SGH-I957R": ["Samsung", "Galaxy Tab 8.9", "tablet"],
        "SGH-I987": ["Samsung", "Galaxy Tab 7.0", "tablet"],
        "SGH-I997": ["Samsung", "Infuse 4G"],
        "SGH-I997R": ["Samsung", "Infuse 4G"],
        "SGH-I9000": ["Samsung", "Galaxy S"],
        "SGH-S730G": ["Samsung", "SGH-S730"],
        "SGH-T499": ["Samsung", "Dart"],
        "SGH-T499V": ["Samsung", "Galaxy Mini"],
        "SGH-T499Y": ["Samsung", "Galaxy Mini"],
        "SGH-T589": ["Samsung", "Gravity Smart"],
        "SGH-T589R": ["Samsung", "Gravity Smart"],
        "SGH-T679": ["Samsung", "Exhibit II 4G"],
        "SGH-T679M": ["Samsung", "Exhibit II 4G"],
        "SGH-T759": ["Samsung", "Exhibit 4G"],
        "SGH-T769": ["Samsung", "Galaxy S Blaze 4G"],
        "SGH-T839": ["Samsung", "T-Mobile Sidekick"],
        "SGH-T849": ["Samsung", "Galaxy Tab 7.0", "tablet"],
        "SGH-T859": ["Samsung", "Galaxy Tab 10.1", "tablet"],
        "SGH-T869": ["Samsung", "Galaxy Tab 7.0 Plus", "tablet"],
        "SGH-T879": ["Samsung", "Galaxy Note"],
        "SGH-T959": ["Samsung", "Vibrant"],
        "SGH-T959D": ["Samsung", "Galaxy S Fascinate 3G+"],
        "SGH-T959P": ["Samsung", "Galaxy S Fascinate 4G"],
        "SGH-T959V": ["Samsung", "Galaxy S 4G"],
        "SGH-T989": ["Samsung", "Galaxy S II"],
        "SGH-T989D": ["Samsung", "Galaxy S II X"],
        "SGH-T999": ["Samsung", "Galaxy S Blaze 4G"],
        "SGH-T999V": ["Samsung", "Galaxy S Blaze 4G"],
        "SHV-E120K": ["Samsung", "Galaxy S II HD LTE"],
        "SHV-E120L": ["Samsung", "Galaxy S II HD LTE"],
        "SHV-E120S": ["Samsung", "Galaxy S II HD LTE"],
        "SHV-E110S": ["Samsung", "Galaxy S II LTE"],
        "SHV-E140S": ["Samsung", "Galaxy Tab 8.9", "tablet"],
        "SHV-E150S": ["Samsung", "Galaxy Tab 7.7", "tablet"],
        "SHV-E160K": ["Samsung", "Galaxy Note"],
        "SHV-E160L": ["Samsung", "Galaxy Note LTE"],
        "SHV-E160S": ["Samsung", "Galaxy Note LTE"],
        "SHV-E170K": ["Samsung", "SHV-E170K"],
        "SHV-E170L": ["Samsung", "SHV-E170L"],
        "SHV-E210K": ["Samsung", "Galaxy S III"],
        "SHV-E210L": ["Samsung", "Galaxy S III"],
        "SHV-E210S": ["Samsung", "Galaxy S III"],
        "SHW-M100S": ["Samsung", "Galaxy A"],
        "SHW-M110S": ["Samsung", "Galaxy S"],
        "SHW-M130L": ["Samsung", "Galaxy U"],
        "SHW-M130K": ["Samsung", "Galaxy K"],
        "SHW-M180K": ["Samsung", "Galaxy Tab", "tablet"],
        "SHW-M180L": ["Samsung", "Galaxy Tab", "tablet"],
        "SHW-M180S": ["Samsung", "Galaxy Tab", "tablet"],
        "SHW-M180W": ["Samsung", "Galaxy Tab", "tablet"],
        "SHW-M185S": ["Samsung", "Galaxy Tab", "tablet"],
        "SHW-M190S": ["Samsung", "Galaxy S Hoppin"],
        "SHW-M220L": ["Samsung", "Galaxy Neo"],
        "SHW-M240S": ["Samsung", "Galaxy Ace"],
        "SHW-M250K": ["Samsung", "Galaxy S II"],
        "SHW-M250L": ["Samsung", "Galaxy S II"],
        "SHW-M250S": ["Samsung", "Galaxy S II"],
        "SHW-M300W": ["Samsung", "Galaxy Tab 10.1", "tablet"],
        "SHW-M305W": ["Samsung", "Galaxy Tab 8.9", "tablet"],
        "SHW-M340S": ["Samsung", "Galaxy M Style"],
        "SHW-M380K": ["Samsung", "Galaxy Tab 10.1", "tablet"],
        "SHW-M380S": ["Samsung", "Galaxy Tab 10.1", "tablet"],
        "SHW-M380W": ["Samsung", "Galaxy Tab 10.1", "tablet"],
        "SHW-M440S": ["Samsung", "Galaxy S III"],
        "SMT-i9100": ["Samsung", "SMT-I9100", "tablet"],
        "SPH-D600": ["Samsung", "Conquer 4G"],
        "SPH-D700": ["Samsung", "Epic 4G"],
        "SPH-D705": ["Samsung", "Epic 4G 2"],
        "SPH-D710": ["Samsung", "Epic 4G Touch"],
        "SPH-L700": ["Samsung", "Galaxy Nexus"],
        "SPH-L710": ["Samsung", "Galaxy S III"],
        "SPH-M820": ["Samsung", "Galaxy Prevail"],
        "SPH-M820-BST": ["Samsung", "Galaxy Prevail"],
        "SPH-M580": ["Samsung", "Replenish"],
        "SPH-M900": ["Samsung", "Moment"],
        "SPH-M910": ["Samsung", "Intercept"],
        "SPH-M920": ["Samsung", "Transform"],
        "SPH-M930": ["Samsung", "Transform Ultra"],
        "SPH-M930BST": ["Samsung", "Transform Ultra"],
        "SPH-P100": ["Samsung", "Galaxy Tab", "tablet"],
        "YP-GB1": ["Samsung", "Galaxy Player", "media"],
        "YP-GB70": ["Samsung", "Galaxy Player 70", "media"],
        "YP-GB70D": ["Samsung", "Galaxy Player 70 Plus", "media"],
        "YP-GS1": ["Samsung", "Galaxy S WiFi 3.6", "media"],
        "YP-G1": ["Samsung", "Galaxy S WiFi 4.0", "media"],
        "YP-GI1": ["Samsung", "Galaxy S WiFi 4.2", "media"],
        "YP-G50": ["Samsung", "Galaxy Player", "media"],
        "YP-G70": ["Samsung", "Galaxy S WiFi 5.0", "media"],
        GT9100: ["Samsung", "Galaxy S II"],
        I897: ["Samsung", "Captivate"],
        I7500: ["Samsung", "Galaxy"],
        I9000: ["Samsung", "Galaxy S"],
        T959: ["Samsung", "Galaxy S Vibrant"],
        "Captivate-I897": ["Samsung", "Captivate"],
        Galaxy: ["Samsung", "Galaxy"],
        "Galaxy Note": ["Samsung", "Galaxy Note"],
        GalaxyS: ["Samsung", "Galaxy S"],
        "Galaxy S II": ["Samsung", "Galaxy S II"],
        "Galaxy X": ["Samsung", "Galaxy X"],
        "Galaxy Spica": ["Samsung", "Galaxy Spica"],
        "GALAXY Tab": ["Samsung", "Galaxy Tab", "tablet"],
        "GALAXY NEXUS": ["Samsung", "Galaxy Nexus"],
        Vibrantmtd: ["Samsung", "Vibrant"],
        "SC-01C": ["Samsung", "Galaxy Tab", "tablet"],
        "SC-01D": ["Samsung", "Galaxy Tab 10.1 LTE", "tablet"],
        "SC-02B": ["Samsung", "Galaxy S"],
        "SC-02C": ["Samsung", "Galaxy S II"],
        "SC-02D": ["Samsung", "Galaxy Tab 7.0 Plus", "tablet"],
        "SC-03D": ["Samsung", "Galaxy S II LTE"],
        "SC-04D": ["Samsung", "Galaxy Nexus"],
        "SC-05D": ["Samsung", "Galaxy Note LTE"],
        "SC-06D": ["Samsung", "Galaxy S III"],
        ISW11SC: ["Samsung", "Galaxy S II WiMAX"],
        "GT-S7562": ["Samsung", "GT-S7562"],
        "GT-S7562i": ["Samsung", "GT-S7562i"],
        A01SH: ["Sharp", "A01SH"],
        IS01: ["Sharp", "IS01"],
        IS03: ["Sharp", "IS03"],
        IS05: ["Sharp", "IS05"],
        IS11SH: ["Sharp", "Aquos IS11SH"],
        IS12SH: ["Sharp", "Aquos IS12SH"],
        IS13SH: ["Sharp", "Aquos IS13SH"],
        IS14SH: ["Sharp", "Aquos IS14SH"],
        ISW16SH: ["Sharp", "Aquos ISW16SH"],
        "EB-W51GJ": ["Sharp", "EB-W51GJ"],
        SBM003SH: ["Sharp", "Galapagos"],
        SBM005SH: ["Sharp", "Galapagos"],
        SBM006SH: ["Sharp", "Aquos"],
        SBM007SH: ["Sharp", "Aquos 007SH"],
        SBM009SH: ["Sharp", "Aquos 009SH"],
        SBM102SH: ["Sharp", "Aquos 102SH"],
        SBM103SH: ["Sharp", "Aquos 103SH"],
        SBM104SH: ["Sharp", "Aquos 104SH"],
        SBM107SH: ["Sharp", "Aquos 107SH"],
        SBM107SHB: ["Sharp", "Aquos 107SH"],
        "SH-01D": ["Sharp", "Aquos SH-01D"],
        "SH-02D": ["Sharp", "Aquos slider SH-02D"],
        "SH-03C": ["Sharp", "Lynx 3D"],
        "SH-06D": ["Sharp", "Aquos SH-06D"],
        "SH-09D": ["Sharp", "Aquos Zeta SH-09D"],
        "SH-10B": ["Sharp", "Lynx"],
        "SH-12C": ["Sharp", "Aquos"],
        "SH-13C": ["Sharp", "Aquos f SH-13C"],
        SH80F: ["Sharp", "Aquos SH80F"],
        SH72x8U: ["Sharp", "SH72x8U"],
        SH8118U: ["Sharp", "SH8118U"],
        SH8128U: ["Sharp", "SH8128U"],
        SH8158U: ["Sharp", "SH8158U"],
        SH8188U: ["Sharp", "SH8188U"],
        SH8268U: ["Sharp", "SH8268U"],
        "INFOBAR C01": ["Sharp", "INFOBAR C01"],
        "SPX-5": ["Simvalley", "SPX-5"],
        "SPX-5 3G": ["Simvalley", "SPX-5 3G"],
        "SmartQ G7": ["SmartQ", "G7", "tablet"],
        SmartQT7: ["SmartQ", "T7", "tablet"],
        SmartQT10: ["SmartQ", "T10", "tablet"],
        SmartQT15: ["SmartQ", "T15", "tablet"],
        SmartQT19: ["SmartQ", "T19", "tablet"],
        SmartQT20: ["SmartQ", "T20", "tablet"],
        "OMS1 6": ["Sony Ericsson", "A8i"],
        E10a: ["Sony Ericsson", "Xperia X10 Mini"],
        E10i: ["Sony Ericsson", "Xperia X10 Mini"],
        E10iv: ["Sony Ericsson", "Xperia X10 Mini"],
        E15: ["Sony Ericsson", "Xperia X8"],
        E15a: ["Sony Ericsson", "Xperia X8"],
        E15i: ["Sony Ericsson", "Xperia X8"],
        E15iv: ["Sony Ericsson", "Xperia X8"],
        "E15i-o": ["Sony Ericsson", "Xperia X8"],
        E16i: ["Sony Ericsson", "W8 Walkman"],
        LT11i: ["Sony Ericsson", "Xperia Neo V"],
        LT15: ["Sony Ericsson", "Xperia Arc"],
        LT15a: ["Sony Ericsson", "Xperia Arc"],
        LT15i: ["Sony Ericsson", "Xperia Arc"],
        LT15iv: ["Sony Ericsson", "Xperia Arc"],
        "LT15i-o": ["Sony Ericsson", "Xperia Arc"],
        LT18a: ["Sony Ericsson", "Xperia Arc S"],
        LT18i: ["Sony Ericsson", "Xperia Arc S"],
        LT18iv: ["Sony Ericsson", "Xperia Arc S"],
        "LT18i-o": ["Sony Ericsson", "Xperia Arc S"],
        LT22i: ["Sony", "Xperia P"],
        LT26i: ["Sony", "Xperia S"],
        LT26ii: ["Sony", "Xperia S"],
        "LT26i-o": ["Sony", "Xperia S"],
        LT28at: ["Sony", "Xperia Ion"],
        LT28h: ["Sony", "Xperia Ion"],
        LT28i: ["Sony", "Xperia Ion"],
        LT29i: ["Sony", "Xperia GX"],
        SonyLT29i: ["Sony", "Xperia GX"],
        SonyLT30a: ["Sony", "Xperia Mint"],
        SonyLT30p: ["Sony", "Xperia Mint"],
        MK16a: ["Sony Ericsson", "Xperia Pro"],
        MK16i: ["Sony Ericsson", "Xperia Pro"],
        MT11a: ["Sony Ericsson", "Xperia Neo V"],
        MT11i: ["Sony Ericsson", "Xperia Neo V"],
        MT11iv: ["Sony Ericsson", "Xperia Neo V"],
        "MT11i-o": ["Sony Ericsson", "Xperia Neo V"],
        MT15a: ["Sony Ericsson", "Xperia Neo"],
        MT15i: ["Sony Ericsson", "Xperia Neo"],
        MT15iv: ["Sony Ericsson", "Xperia Neo"],
        "MT15i-o": ["Sony Ericsson", "Xperia Neo"],
        MT25i: ["Sony", "Xperia Neo L"],
        MT27i: ["Sony", "Xperia Sola"],
        R800a: ["Sony Ericsson", "Xperia Play"],
        R800i: ["Sony Ericsson", "Xperia Play"],
        R800iv: ["Sony Ericsson", "Xperia Play"],
        R800at: ["Sony Ericsson", "Xperia Play"],
        R800x: ["Sony Ericsson", "Xperia Play"],
        SK17a: ["Sony Ericsson", "Xperia Mini Pro"],
        SK17i: ["Sony Ericsson", "Xperia Mini Pro"],
        SK17iv: ["Sony Ericsson", "Xperia Mini Pro"],
        "SK17i-o": ["Sony Ericsson", "Xperia Mini Pro"],
        ST15a: ["Sony Ericsson", "Xperia Mini"],
        ST15i: ["Sony Ericsson", "Xperia Mini"],
        ST17a: ["Sony Ericsson", "Xperia Active"],
        ST17i: ["Sony Ericsson", "Xperia Active"],
        ST18a: ["Sony Ericsson", "Xperia Ray"],
        ST18i: ["Sony Ericsson", "Xperia Ray"],
        ST18iv: ["Sony Ericsson", "Xperia Ray"],
        ST18av: ["Sony Ericsson", "Xperia Ray"],
        SonyST21: ["Sony", "'Tapioca'"],
        SonyST21i: ["Sony", "'Tapioca'"],
        SonyST21a2: ["Sony", "'Tapioca'"],
        ST21: ["Sony", "'Tapioca'"],
        ST21i: ["Sony", "'Tapioca'"],
        SonyST23i: ["Sony", "'Tapioca DS'"],
        ST25i: ["Sony", "Xperia U"],
        ST27i: ["Sony", "Xperia Go"],
        U20a: ["Sony Ericsson", "Xperia X10 Mini Pro"],
        U20i: ["Sony Ericsson", "Xperia X10 Mini Pro"],
        U20iv: ["Sony Ericsson", "Xperia X10 Mini Pro"],
        WT13i: ["Sony Ericsson", "Mix Walkman"],
        WT18i: ["Sony Ericsson", "Walkman"],
        WT19a: ["Sony Ericsson", "Live with Walkman"],
        WT19i: ["Sony Ericsson", "Live with Walkman"],
        WT19iv: ["Sony Ericsson", "Live with Walkman"],
        X8: ["Sony Ericsson", "Xperia X8"],
        X10: ["Sony Ericsson", "Xperia X10"],
        X10a: ["Sony Ericsson", "Xperia X10"],
        X10i: ["Sony Ericsson", "Xperia X10"],
        X10iv: ["Sony Ericsson", "Xperia X10"],
        X10S: ["Sony Ericsson", "Xperia X10"],
        X10mini: ["Sony Ericsson", "Xperia X10 Mini"],
        "X10 Mini": ["Sony Ericsson", "Xperia X10 Mini"],
        "X10 Mini Pro": ["Sony Ericsson", "Xperia X10 Mini Pro"],
        Z1i: ["Sony Ericsson", "Xperia Play"],
        S51SE: ["Sony Ericsson", "Xperia Mini"],
        IS11S: ["Sony Ericsson", "Xperia Acro"],
        IS12S: ["Sony Ericsson", "Xperia Acro HD"],
        "SO-01B": ["Sony Ericsson", "Xperia X10"],
        "SO-01C": ["Sony Ericsson", "Xperia Arc"],
        "SO-01D": ["Sony Ericsson", "Xperia Play"],
        "SO-02C": ["Sony Ericsson", "Xperia Acro"],
        "SO-02D": ["Sony Ericsson", "Xperia NX"],
        "SO-03C": ["Sony Ericsson", "Xperia Ray"],
        "SO-03D": ["Sony Ericsson", "Xperia Acro HD"],
        "SO-04D": ["Sony", "Xperia GX"],
        "SO-05D": ["Sony", "Xperia SX"],
        "XPERIA X8": ["Sony Ericsson", "Xperia X8"],
        "Xperia X8": ["Sony Ericsson", "Xperia X8"],
        "Xperia X10": ["Sony Ericsson", "Xperia X10"],
        "Xperia ray": ["Sony Ericsson", "Xperia Ray"],
        "Xperia Ray": ["Sony Ericsson", "Xperia Ray"],
        "Xperia Arc": ["Sony Ericsson", "Xperia Arc"],
        "Xperia Mini": ["Sony Ericsson", "Xperia Mini"],
        "Xperia neo": ["Sony Ericsson", "Xperia Neo"],
        "Xperia Neo": ["Sony Ericsson", "Xperia Neo"],
        "XPERIA NEO": ["Sony Ericsson", "Xperia Neo"],
        "Xperia NeoV": ["Sony Ericsson", "Xperia Neo V"],
        "Xperia Neo V": ["Sony Ericsson", "Xperia Neo V"],
        "Xperia Play": ["Sony Ericsson", "Xperia Play"],
        "Sony Ericsson Xperia X1": ["Sony Ericsson", "Xperia X1"],
        SonyHayabusa: ["Sony", "Xperia Ion"],
        Hayabusa: ["Sony", "Xperia Ion"],
        nozomi: ["Sony", "Xperia S"],
        "Sony Tablet P": ["Sony", "Tablet P", "tablet"],
        "Sony Tablet S": ["Sony", "Tablet S", "tablet"],
        "NWZ-Z1000Series": ["Sony", "Walkman Z", "media"],
        "NW-Z1000Series": ["Sony", "Walkman Z", "media"],
        "Spice Mi280": ["Spice", "Mi-280"],
        "Spice Mi300": ["Spice", "Mi-300"],
        "Spice Mi-310": ["Spice", "Mi-310"],
        "Spice Mi-425": ["Spice", "Mi-425"],
        "SPICE Mi-720": ["Spice", "Mi-720"],
        "A7272+": ["Star", "A7272+"],
        "e1109 v73 gq1002 ctp": ["Star", "X18i"],
        TS1004T: ["Surf 3Q", "TS1004T", "tablet"],
        "SYTABEX7-2": ["Sylvania", "SYTABEX7", "tablet"],
        "TCL A860": ["TCL", "A860"],
        "TCL A906": ["TCL", "A906"],
        "TCL A909": ["TCL", "A909"],
        "TCL A919": ["TCL", "A919"],
        "TCL A990": ["TCL", "A990"],
        "TCL A996": ["TCL", "A996"],
        "TCL A998": ["TCL", "A998"],
        "TCL GENESEE E708": ["TCL", "Genesee E708"],
        "A10t(5DM3)": ["Teclast", "A10T", "tablet"],
        P72: ["Teclast", "P72", "tablet"],
        P76TI: ["Teclast", "P76Ti", "tablet"],
        P81HD: ["Teclast", "P81HD", "tablet"],
        "P85(R8A1)": ["Teclast", "P85", "tablet"],
        "T720 SE": ["Teclast", "T720", "tablet"],
        "T760 from moage.com": ["Teclast", "T760", "tablet"],
        tegav2: ["Tegatech", "TEGA v2", "tablet"],
        "TM-7025": ["teXet", "TM-7025", "tablet"],
        MoFing: ["Thomson", "MoFing", "tablet"],
        Ultimate10: ["Tomtec", "Ultimate10", "tablet"],
        "Thl V7": ["THL", "V7"],
        "ThL V7": ["THL", "V7"],
        "ThL V8": ["THL", "V8"],
        "ThL V9": ["THL", "V9"],
        "ThL V11": ["THL", "V11"],
        "TSB CLOUD COMPANION;TOSHIBA AC AND AZ": ["Toshiba", "Dynabook AZ", "desktop"],
        "TOSHIBA AC AND AZ": ["Toshiba", "Dynabook AZ", "desktop"],
        "TOSHIBA FOLIO AND A": ["Toshiba", "Folio 100", "tablet"],
        "T-01C": ["Toshiba", "Regza T-01C"],
        "T-01D": ["Toshiba", "Regza T-01D"],
        IS04: ["Toshiba", "Regza IS04"],
        IS11T: ["Toshiba", "Regza IS11T"],
        AT1S0: ["Toshiba", "Regza AT1S0"],
        Tostab03: ["Toshiba", "Regza AT100", "tablet"],
        AT100: ["Toshiba", "Regza AT100", "tablet"],
        AT200: ["Toshiba", "Regza AT200", "tablet"],
        AT470: ["Toshiba", "Regza AT470", "tablet"],
        AT570: ["Toshiba", "Regza AT570", "tablet"],
        AT830: ["Toshiba", "Regza AT830", "tablet"],
        "Folio 100": ["Toshiba", "Folio 100", "tablet"],
        folio100: ["Toshiba", "Folio 100", "tablet"],
        THRiVE: ["Toshiba", "THRiVE", "tablet"],
        "Fantastic T3": ["TWM", "Fantastic T3"],
        M70014: ["United Star Technology", "M70014", "tablet"],
        PS47: ["Velocity Micro", "Cruz PS47", "tablet"],
        T301: ["Velocity Micro", "Cruz T301", "tablet"],
        "Vibo-A688": ["FIH", "Vibo A688"],
        "Videocon-V7500": ["Videocon", "V7500"],
        GTablet: ["ViewSonic", "gTablet", "tablet"],
        GtabComb: ["ViewSonic", "gTablet", "tablet"],
        "TeamDRH ICS for GTablet": ["ViewSonic", "gTablet", "tablet"],
        ViewPad7: ["ViewSonic", "ViewPad 7", "tablet"],
        "ViewPad 10e": ["ViewSonic", "ViewPad 10e", "tablet"],
        VTAB1008: ["Vizio", "VTAB1008", "tablet"],
        VTAB3010: ["Vizio", "VTAB3010", "tablet"],
        "VOTO W5300": ["VOTO", "W5300"],
        "xPAD-70": ["WayteQ", "xPAD-70", "tablet"],
        "xTAB-70": ["WayteQ", "xTAB-70", "tablet"],
        "WellcoM-A99": ["WellcoM", "A99"],
        N12: ["Window", "N12", "tablet"],
        N12R: ["Window", "N12R", "tablet"],
        N50: ["Window", "N50", "tablet"],
        N50DT: ["Window", "N50DT", "tablet"],
        N50GT: ["Window", "N50GT", "tablet"],
        "N50GT A": ["Window", "N50GT-A", "tablet"],
        N70: ["Window", "N70", "tablet"],
        "N70 DUAL CORE": ["Window", "N70 Dual Core", "tablet"],
        N80: ["Window", "N80", "tablet"],
        N90: ["Window", "N90", "tablet"],
        "N90 DUAL CORE2 V12": ["Window", "N90 Dual Core", "tablet"],
        N612: ["Wishway", "N612"],
        "AT-AS43D": ["Wolfgang", "AT-AS43D"],
        M12: ["Wopad", "M12", "tablet"],
        WM8650: ["WonderMedia", "WM8650", "tablet"],
        "MI-ONE": ["Xiaomi", "MI-ONE"],
        "MI-ONE C1": ["Xiaomi", "MI-ONE C1"],
        "MI-ONE Plus": ["Xiaomi", "MI-ONE Plus"],
        "MI 1S": ["Xiaomi", "MI-ONE Plus"],
        "MI 1SC": ["Xiaomi", "MI-ONE 1SC"],
        "mione plus": ["Xiaomi", "MI-ONE Plus"],
        "MI-TWO": ["Xiaomi", "MI-TWO"],
        "MI 2": ["Xiaomi", "MI-TWO"],
        "MI 2S": ["Xiaomi", "MI-TWO Plus"],
        "MI 2SC": ["Xiaomi", "MI-TWO Plus"],
        Q07CL01: ["XVision", "Q07", "tablet"],
        N6: ["Yarvik", "210 Tablet", "tablet"],
        EMR1879: ["Yidong", "EMR1879", "tablet"],
        "yusun W702": ["Yusun", "W702"],
        "YX-YUSUN E80": ["Yusun", "E80"],
        zt180: ["Zenithink", "ZT-180", "tablet"],
        Jaguar7: ["ZiiLabs", "Jaguar 7", "tablet"],
        "Ziss Ranger HD": ["Ziss", "Ranger HD"],
        "ZTE Libra": ["ZTE", "Libra"],
        "ZTE-T T9": ["ZTE", "Light Tab T9", "tablet"],
        V9: ["ZTE", "Light Tab V9", "tablet"],
        "V9e+": ["ZTE", "Light Tab 2", "tablet"],
        V9A: ["ZTE", "Light Tab 2", "tablet"],
        "Light Tab 2W": ["ZTE", "Light Tab 2", "tablet"],
        "Light Tab 2": ["ZTE", "Light Tab 2", "tablet"],
        V9C: ["ZTE", "Light Tab 3", "tablet"],
        V55: ["ZTE", "Optik", "tablet"],
        Acqua: ["ZTE", "Acqua"],
        Blade: ["ZTE", "Blade"],
        "Blade-V880": ["ZTE", "Blade"],
        "ZTE-U V880": ["ZTE", "Blade"],
        "Blade-opda": ["ZTE", "Blade"],
        "ZTE-BLADE": ["ZTE", "Blade"],
        "ZTE Blade": ["ZTE", "Blade"],
        "ZTE V880": ["ZTE", "Blade"],
        "ZTE-U(V)880+": ["ZTE", "Blade"],
        V880: ["ZTE", "Blade"],
        a5: ["ZTE", "Blade"],
        Blade2: ["ZTE", "Blade 2"],
        "Blade S": ["ZTE", "Blade S"],
        X500: ["ZTE", "Score"],
        "ZTE-X500": ["ZTE", "Score"],
        Skate: ["ZTE", "Skate"],
        "ZTE Skate": ["ZTE", "Skate"],
        "ZTE-Skate": ["ZTE", "Skate"],
        "ZTE-SKATE": ["ZTE", "Skate"],
        "ZTE-V960": ["ZTE", "Skate"],
        "ZTE-U V960": ["ZTE", "Skate"],
        "ZTE Racer": ["ZTE", "Racer"],
        "ZTE-RACER": ["ZTE", "Racer"],
        "MTC 916": ["ZTE", "Racer"],
        Racer: ["ZTE", "Racer"],
        RacerII: ["ZTE", "Racer 2"],
        RACERII: ["ZTE", "Racer 2"],
        "ZTE Roamer": ["ZTE", "Roamer"],
        N860: ["ZTE", "Warp"],
        N880: ["ZTE", "Blade"],
        "ZTE-T U802": ["ZTE", "T-U802"],
        "ZTE-T U806": ["ZTE", "T-U806"],
        "ZTE-T U812": ["ZTE", "T-U812"],
        "ZTE-T U830": ["ZTE", "T-U830"],
        "ZTE-T U880": ["ZTE", "T-U880"],
        "ZTE T U880": ["ZTE", "T-U880"],
        "ZTE-TU880": ["ZTE", "T-U880"],
        "ZTE-TU900": ["ZTE", "T-U900"],
        "ZTE-T U960": ["ZTE", "T-U960"],
        "ZTE-TU960s": ["ZTE", "T-U960"],
        "ZTE-T U960s": ["ZTE", "T-U960"],
        "ZTE U N720": ["ZTE", "U-N720"],
        "ZTE-U V856": ["ZTE", "U-V856"],
        "ZTE-U V857": ["ZTE", "U-V857"],
        "ZTE-U V881": ["ZTE", "U-V881"],
        "ZTE-U X850": ["ZTE", "U-X850"],
        "ZTE-U X876": ["ZTE", "U-X876"],
        "ZTE-X876": ["ZTE", "U-X876"],
        "ZTE-C R750": ["ZTE", "C-R750"],
        "ZTE-C N600": ["ZTE", "C-N600"],
        "ZTE-C N600+": ["ZTE", "C-N600"],
        "ZTE-C N606": ["ZTE", "C-N606"],
        "ZTE-C N700": ["ZTE", "C-N700"],
        "ZTE-C N760": ["ZTE", "C-N760"],
        "ZTE-C N880": ["ZTE", "C-N880"],
        "ZTE-C N880S": ["ZTE", "C-N880"],
        "ZTE-C N880s": ["ZTE", "C-N880"],
        "ZTE-C X500": ["ZTE", "C-X500"],
        "ZTE-C X920": ["ZTE", "C-X920"],
        "ZXY-ZTE-C X920": ["ZTE", "C-X920"],
        "ZTE GV821": ["ZTE", "G-V821"],
        "ZTE N880E": ["ZTE", "N880E"],
        "ZTE-N880E": ["ZTE", "N880E"],
        "MIUI N880S": ["ZTE", "N880S"],
        "ZTE N882E": ["ZTE", "N882E"],
        "ZTE N855D": ["ZTE", "N855D"],
        "ZTE-N910": ["ZTE", "N910"],
        E810: ["ZTE", "E810"],
        u880: ["ZTE", "U880"],
        "ZTE U880E": ["ZTE", "U880E"],
        U880: ["ZTE", "U880"],
        "ZTE U970": ["ZTE", "U970"],
        "ZTE V768": ["ZTE", "V768"],
        "ZTE-V856": ["ZTE", "V856"],
        "ZTE V877b": ["ZTE", "V877"],
        "ZTE V889D": ["ZTE", "V889"],
        "ZTE-Z990": ["ZTE", "Z990"],
        ZTEU790: ["ZTE", "U790"],
        "003Z": ["ZTE", "Softbank 003Z"],
        "008Z": ["ZTE", "Softbank 008Z"],
        "009Z": ["ZTE", "Softbank Star7"],
        "i-mobile i691": ["i-Mobile", "i691"],
        "i-mobile i695": ["i-Mobile", "i695"],
        "i-mobile i858": ["i-Mobile", "i858"],
        "i-mobile 3G 8500": ["i-Mobile", "3G 8500"],
        "i-mobile I-Note": ["i-Mobile", "i-Note", "tablet"],
        "Optimus Boston": ["Optimus", "Boston"],
        "Optimus San Francisco": ["Optimus", "San Francisco"],
        "Optimus Monte Carlo": ["Optimus", "Monte Carlo"],
        "Orange Boston": ["Orange", "Boston"],
        "Orange Monte Carlo": ["Orange", "Monte Carlo"],
        "San Francisco": ["Orange", "San Francisco"],
        "San Francisco for Orange": ["Orange", "San Francisco"],
        "Orange San Francisco": ["Orange", "San Francisco"],
        MOVE: ["T-Mobile", "MOVE"],
        "T-Mobile G1": ["T-Mobile", "G1"],
        "T-Mobile G2": ["T-Mobile", "G2"],
        "T-Mobile G2 Touch": ["T-Mobile", "G2"],
        "LG-P999": ["T-Mobile", "G2x"],
        "LG-E739": ["T-Mobile", "myTouch"],
        "T-Mobile myTouch 3G": ["T-Mobile", "myTouch 3G"],
        "T-Mobile myTouch 3G Slide": ["T-Mobile", "myTouch 3G Slide"],
        "T-Mobile Espresso": ["T-Mobile", "myTouch 3G Slide"],
        "HTC myTouch 3G Slide": ["T-Mobile", "myTouch 3G Slide"],
        "T-Mobile myTouch 4G": ["T-Mobile", "myTouch 4G"],
        "HTC Glacier": ["T-Mobile", "myTouch 4G"],
        "HTC Panache": ["T-Mobile", "myTouch 4G"],
        myTouch4G: ["T-Mobile", "myTouch 4G"],
        "My Touch 4G": ["T-Mobile", "myTouch 4G"],
        "HTC Mytouch 4G": ["T-Mobile", "myTouch 4G"],
        "HTC My Touch 4G": ["T-Mobile", "myTouch 4G"],
        "HTC mytouch4g": ["T-Mobile", "myTouch 4G"],
        "HTC myTouch 4G Slide": ["T-Mobile", "myTouch 4G Slide"],
        "myTouch 4G Slide": ["T-Mobile", "myTouch 4G Slide"],
        "T-Mobile myTouch Q": ["T-Mobile", "myTouch Q"],
        "LG-C800": ["T-Mobile", "myTouch Q"],
        "Pulse Mini": ["T-Mobile", "Pulse Mini"],
        "Vodafone 845": ["Vodafone", "845 Nova"],
        "Vodafone 858": ["Vodafone", "858 Smart"],
        "Vodafone 945": ["Vodafone", "945"],
        "Vodafone Smart II": ["Vodafone", "Smart II"],
        SmartTab10: ["Vodafone", "SmartTab 10", "tablet"],
        "SCH-N719": ["Samsung", "Galaxy Note II"],
        "Coolpad 8190": ["Coolpad", "8190"],
        U705T: ["Oppo", "Ulike2"],
        "Coolpad 8020+": ["Coolpad", "8020"],
        "Huawei Y310-5000": ["Huawei", "Y310"],
        "GT-S7572": ["Samsung", "Galaxy Trend Duos II"],
        "Lenovo A278t": ["Lenovo", "A278t"],
        "Lenovo A690": ["Lenovo", "A690"],
        "GT-I8262D": ["Samsung", "LePhone I8262D"],
        "Lenovo A278t": ["Lenovo", "A278t"],
        "MI 2C": ["Xiaomi", "MI-TWO"],
        "Coolpad 8070": ["Coolpad", "8070"],
        R813T: ["Oppo", "R813T"],
        "ZTE U930": ["ZTE", "U930"],
        "Lenovo A360": ["Lenovo", "LePhone A360"],
        "SCH-N719": ["Samsung", "Galaxy Note II"],
        "Coolpad 8010": ["Coolpad", "8010"],
        "LENOVO-Lenovo-A288t": ["Lenovo", "A288t"],
        U701T: ["Oppo", "U701T"],
        ZTEU795: ["Coolpad", "U795"],
        "Haier-HT-I617": ["Haier", "I617"],
        ZTEU880s: ["ZTE", "T-U880"],
        "GT-S6352": ["Samsung", "GT-S6352"],
        "GT-S7568": ["Samsung", "GT-S7568"],
        "K-Touch T619+": ["K-Touch", "T619"],
        "MI 2A": ["Xiaomi", "MI-TWO A"],
        "GT-N7108": ["Samsung", "Galaxy Note II"],
        "K-Touch T621": ["K-Touch", "T621"],
        "LENOVO-Lenovo-A298t": ["Lenovo", "A298"],
        "Coolpad 8150": ["Coolpad", "8150"],
        "5860S": ["Coolpad", "5860"],
        ZTEU807: ["ZTE", "U807"],
        "SCH-I739": ["Samsung", "SCH-I739"],
        "SCH-I829": ["Samsung", "SCH-I829"],
        "HS-E830": ["Hisense", "E830"],
        "HS-E920": ["Hisense", "E920"],
        "Lenovo S720": ["Lenovo", "S720"],
        "MI 2C": ["Xiaomi", "MI-TWO"],
        "OPPO R813T": ["Oppo", "R813"],
        "SCH-I879": ["Samsung", "Galaxy Note"],
        "GT-S6102E": ["Samsung", "Galaxy Y Duos"]
    };
    var H = {
        "9600": "Bold",
        "9650": "Bold",
        "9700": "Bold",
        "9780": "Bold",
        "9790": "Bold",
        "9900": "Bold",
        "9930": "Bold",
        "8300": "Curve",
        "8310": "Curve",
        "8320": "Curve",
        "8330": "Curve",
        "8350i": "Curve",
        "8520": "Curve",
        "8530": "Curve",
        "8900": "Curve",
        "9220": "Curve",
        "9300": "Curve",
        "9330": "Curve",
        "9350": "Curve",
        "9360": "Curve",
        "9370": "Curve",
        "9380": "Curve",
        "8100": "Pearl",
        "8110": "Pearl",
        "8120": "Pearl",
        "8130": "Pearl",
        "8220": "Pearl",
        "8230": "Pearl",
        "9100": "Pearl",
        "9105": "Pearl",
        "9530": "Storm",
        "9550": "Storm",
        "9670": "Style",
        "9800": "Torch",
        "9810": "Torch",
        "9850": "Torch",
        "9860": "Torch",
        "9630": "Tour",
        "9981": "Porsche P"
    };
    var M = function () {
        this.initialize.apply(this, Array.prototype.slice.call(arguments))
    };
    M.prototype = {
        initialize: function (a) {
            this.original = a.value || null;
            this.alias = a.alias || null
        }
    };
    var E = function () {
        this.initialize.apply(this, arguments)
    };
    E.prototype = {
        initialize: function (b, a) {
            this.options = {
                useFeatures: a && a.useFeatures || false,
                detectCamouflage: a && a.detectCamouflage || true
            };
            this.browser = {stock: true, hidden: false, channel: ""};
            this.engine = {};
            this.os = {};
            this.device = {type: "desktop", identified: false};
            this.camouflage = false;
            this.features = [];
            this.detect(b)
        }, detect: function (g) {
            if (g.match("Unix")) {
                this.os.name = "Unix"
            }
            if (g.match("FreeBSD")) {
                this.os.name = "FreeBSD"
            }
            if (g.match("OpenBSD")) {
                this.os.name = "OpenBSD"
            }
            if (g.match("NetBSD")) {
                this.os.name = "NetBSD"
            }
            if (g.match("SunOS")) {
                this.os.name = "Solaris"
            }
            if (g.match("Linux")) {
                this.os.name = "Linux";
                if (g.match("CentOS")) {
                    this.os.name = "CentOS";
                    if (match = /CentOS\/[0-9\.\-]+el([0-9_]+)/.exec(g)) {
                        this.os.version = new M({value: match[1].replace(/_/g, ".")})
                    }
                }
                if (g.match("Debian")) {
                    this.os.name = "Debian"
                }
                if (g.match("Fedora")) {
                    this.os.name = "Fedora";
                    if (match = /Fedora\/[0-9\.\-]+fc([0-9]+)/.exec(g)) {
                        this.os.version = new M({value: match[1]})
                    }
                }
                if (g.match("Gentoo")) {
                    this.os.name = "Gentoo"
                }
                if (g.match("Kubuntu")) {
                    this.os.name = "Kubuntu"
                }
                if (g.match("Mandriva Linux")) {
                    this.os.name = "Mandriva";
                    if (match = /Mandriva Linux\/[0-9\.\-]+mdv([0-9]+)/.exec(g)) {
                        this.os.version = new M({value: match[1]})
                    }
                }
                if (g.match("Mageia")) {
                    this.os.name = "Mageia";
                    if (match = /Mageia\/[0-9\.\-]+mga([0-9]+)/.exec(g)) {
                        this.os.version = new M({value: match[1]})
                    }
                }
                if (g.match("Red Hat")) {
                    this.os.name = "Red Hat";
                    if (match = /Red Hat[^\/]*\/[0-9\.\-]+el([0-9_]+)/.exec(g)) {
                        this.os.version = new M({value: match[1].replace(/_/g, ".")})
                    }
                }
                if (g.match("Slackware")) {
                    this.os.name = "Slackware"
                }
                if (g.match("SUSE")) {
                    this.os.name = "SUSE"
                }
                if (g.match("Turbolinux")) {
                    this.os.name = "Turbolinux"
                }
                if (g.match("Ubuntu")) {
                    this.os.name = "Ubuntu";
                    if (match = /Ubuntu\/([0-9.]*)/.exec(g)) {
                        this.os.version = new M({value: match[1]})
                    }
                }
            }
            if (g.match("iPhone( Simulator)?;") || g.match("iPad;") || g.match("iPod;") || g.match(/iPhone\s*\d*s?[cp]?;/i)) {
                this.os.name = "iOS";
                this.os.version = new M({value: "1.0"});
                if (match = /OS (.*) like Mac OS X/.exec(g)) {
                    this.os.version = new M({value: match[1].replace(/_/g, ".")})
                }
                if (g.match("iPhone Simulator;")) {
                    this.device.type = "emulator"
                } else {
                    if (g.match("iPod;")) {
                        this.device.type = "media";
                        this.device.manufacturer = "Apple";
                        this.device.model = "iPod Touch"
                    } else {
                        if (g.match("iPhone;") || g.match(/iPhone\s*\d*s?[cp]?;/i)) {
                            this.device.type = "mobile";
                            this.device.manufacturer = "Apple";
                            this.device.model = "iPhone"
                        } else {
                            this.device.type = "tablet";
                            this.device.manufacturer = "Apple";
                            this.device.model = "iPad"
                        }
                    }
                }
                this.device.identified = true
            } else {
                if (g.match("Mac OS X")) {
                    this.os.name = "Mac OS X";
                    if (match = /Mac OS X (10[0-9\._]*)/.exec(g)) {
                        this.os.version = new M({value: match[1].replace(/_/g, ".")})
                    }
                }
            }
            if (g.match("Windows")) {
                this.os.name = "Windows";
                if (match = /Windows NT ([0-9]\.[0-9])/.exec(g)) {
                    this.os.version = S(match[1]);
                    switch (match[1]) {
                        case"6.2":
                            this.os.version = new M({value: match[1], alias: "8"});
                            break;
                        case"6.1":
                            this.os.version = new M({value: match[1], alias: "7"});
                            break;
                        case"6.0":
                            this.os.version = new M({value: match[1], alias: "Vista"});
                            break;
                        case"5.2":
                            this.os.version = new M({value: match[1], alias: "Server 2003"});
                            break;
                        case"5.1":
                            this.os.version = new M({value: match[1], alias: "XP"});
                            break;
                        case"5.0":
                            this.os.version = new M({value: match[1], alias: "2000"});
                            break;
                        default:
                            this.os.version = new M({value: match[1], alias: "NT " + this.os.version})
                    }
                }
                if (g.match("Windows 95") || g.match("Win95") || g.match("Win 9x 4.00")) {
                    this.os.version = new M({value: "4.0", alias: "95"})
                }
                if (g.match("Windows 98") || g.match("Win98") || g.match("Win 9x 4.10")) {
                    this.os.version = new M({value: "4.1", alias: "98"})
                }
                if (g.match("Windows ME") || g.match("WinME") || g.match("Win 9x 4.90")) {
                    this.os.version = new M({value: "4.9", alias: "ME"})
                }
                if (g.match("Windows XP") || g.match("WinXP")) {
                    this.os.name = new M({value: "5.1", alias: "XP"})
                }
                if (g.match("WP7")) {
                    this.os.name = "Windows Phone";
                    this.os.version = new M({value: "7.0", details: 2});
                    this.device.type = "mobile";
                    this.browser.mode = "desktop"
                }
                if (g.match("Windows CE") || g.match("WinCE") || g.match("WindowsCE")) {
                    if (g.match(" IEMobile")) {
                        this.os.name = "Windows Mobile";
                        if (g.match(" IEMobile 8")) {
                            this.os.version = new M({value: "6.5", details: 2})
                        }
                        if (g.match(" IEMobile 7")) {
                            this.os.version = new M({value: "6.1", details: 2})
                        }
                        if (g.match(" IEMobile 6")) {
                            this.os.version = new M({value: "6.0", details: 2})
                        }
                    } else {
                        this.os.name = "Windows CE";
                        if (match = /WindowsCEOS\/([0-9.]*)/.exec(g)) {
                            this.os.version = new M({value: match[1], details: 2})
                        }
                        if (match = /Windows CE ([0-9.]*)/.exec(g)) {
                            this.os.version = new M({value: match[1], details: 2})
                        }
                    }
                    this.device.type = "mobile"
                }
                if (g.match("Windows Mobile")) {
                    this.os.name = "Windows Mobile";
                    this.device.type = "mobile"
                }
                if (match = /WindowsMobile\/([0-9.]*)/.exec(g)) {
                    this.os.name = "Windows Mobile";
                    this.os.version = new M({value: match[1], details: 2});
                    this.device.type = "mobile"
                }
                if (g.match("Windows Phone [0-9]")) {
                    this.os.name = "Windows Mobile";
                    this.os.version = new M({value: g.match(/Windows Phone ([0-9.]*)/)[1], details: 2});
                    this.device.type = "mobile"
                }
                if (g.match("Windows Phone OS")) {
                    this.os.name = "Windows Phone";
                    this.os.version = new M({value: g.match(/Windows Phone OS ([0-9.]*)/)[1], details: 2});
                    if (this.os.version < 7) {
                        this.os.name = "Windows Mobile"
                    }
                    if (match = /IEMobile\/[^;]+; ([^;]+); ([^;]+)[;|\)]/.exec(g)) {
                        this.device.manufacturer = match[1];
                        this.device.model = match[2]
                    }
                    this.device.type = "mobile";
                    var i = this.device.manufacturer;
                    var b = L(this.device.model);
                    if (typeof D[i] !== "undefined" && typeof D[i][b] !== "undefined") {
                        this.device.manufacturer = D[i][b][0];
                        this.device.model = D[i][b][1];
                        this.device.identified = true
                    }
                    if (i === "Microsoft" && b === "XDeviceEmulator") {
                        this.device.manufacturer = null;
                        this.device.model = null;
                        this.device.type = "emulator";
                        this.device.identified = true
                    }
                }
            }
            if (g.match("Android")) {
                this.os.name = "Android";
                this.os.version = null;
                if (match = /Android(?: )?(?:AllPhone_|CyanogenMod_)?(?:\/)?v?([0-9.]+)/.exec(g.replace("-update", "."))) {
                    this.os.version = new M({value: match[1], details: 3})
                }
                if (g.match("Android Eclair")) {
                    this.os.version = new M({value: "2.0", details: 3})
                }
                this.device.type = "mobile";
                if (this.os.version >= 3) {
                    this.device.type = "tablet"
                }
                if (this.os.version >= 4 && g.match("Mobile")) {
                    this.device.type = "mobile"
                }
                if (match = /Eclair; (?:[a-zA-Z][a-zA-Z](?:[-_][a-zA-Z][a-zA-Z])?) Build\/([^\/]*)\//.exec(g)) {
                    this.device.model = match[1]
                } else {
                    if (match = /; ([^;]*[^;\s])\s+Build/.exec(g)) {
                        this.device.model = match[1]
                    } else {
                        if (match = /[a-zA-Z][a-zA-Z](?:[-_][a-zA-Z][a-zA-Z])?; ([^;]*[^;\s]);\s+Build/.exec(g)) {
                            this.device.model = match[1]
                        } else {
                            if (match = /\(([^;]+);U;Android\/[^;]+;[0-9]+\*[0-9]+;CTC\/2.0\)/.exec(g)) {
                                this.device.model = match[1]
                            } else {
                                if (match = /;\s?([^;]+);\s?[0-9]+\*[0-9]+;\s?CTC\/2.0/.exec(g)) {
                                    this.device.model = match[1]
                                } else {
                                    if (match = /zh-cn;\s*(.*?)(\/|build)/i.exec(g)) {
                                        this.device.model = match[1]
                                    } else {
                                        if (match = /Android [^;]+; (?:[a-zA-Z][a-zA-Z](?:[-_][a-zA-Z][a-zA-Z])?; )?([^)]+)\)/.exec(g)) {
                                            if (!g.match(/[a-zA-Z][a-zA-Z](?:[-_][a-zA-Z][a-zA-Z])?/)) {
                                                this.device.model = match[1]
                                            }
                                        } else {
                                            if (match = /^(.+?)\/\S+/i.exec(g)) {
                                                this.device.model = match[1]
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                if (this.device.model && this.device.model.substring(0, 7) === "Android") {
                    this.device.model = null
                }
                if (this.device.model) {
                    var b = L(this.device.model);
                    if (typeof I[b] !== "undefined") {
                        this.device.manufacturer = I[b][0];
                        this.device.model = I[b][1];
                        if (typeof I[b][2] !== "undefined") {
                            this.device.type = I[b][2]
                        }
                        this.device.identified = true
                    }
                    if (b === "Emulator" || b === "x86 Emulator" || b === "x86 VirtualBox" || b === "vm") {
                        this.device.manufacturer = null;
                        this.device.model = null;
                        this.device.type = "emulator";
                        this.device.identified = true
                    }
                }
                if (g.match("HP eStation")) {
                    this.device.manufacturer = "HP";
                    this.device.model = "eStation";
                    this.device.type = "tablet";
                    this.device.identified = true
                }
                if (g.match("Pre/1.0")) {
                    this.device.manufacturer = "Palm";
                    this.device.model = "Pre";
                    this.device.identified = true
                }
                if (g.match("Pre/1.1")) {
                    this.device.manufacturer = "Palm";
                    this.device.model = "Pre Plus";
                    this.device.identified = true
                }
                if (g.match("Pre/1.2")) {
                    this.device.manufacturer = "Palm";
                    this.device.model = "Pre 2";
                    this.device.identified = true
                }
                if (g.match("Pre/3.0")) {
                    this.device.manufacturer = "HP";
                    this.device.model = "Pre 3";
                    this.device.identified = true
                }
                if (g.match("Pixi/1.0")) {
                    this.device.manufacturer = "Palm";
                    this.device.model = "Pixi";
                    this.device.identified = true
                }
                if (g.match("Pixi/1.1")) {
                    this.device.manufacturer = "Palm";
                    this.device.model = "Pixi Plus";
                    this.device.identified = true
                }
                if (g.match("P160UN?A?/1.0")) {
                    this.device.manufacturer = "HP";
                    this.device.model = "Veer";
                    this.device.identified = true
                }
            }
            if (g.match("GoogleTV")) {
                this.os.name = "Google TV";
                if (g.match("Chrome/5.")) {
                    this.os.version = new M({value: "1"})
                }
                if (g.match("Chrome/11.")) {
                    this.os.version = new M({value: "2"})
                }
                this.device.type = "television"
            }
            if (g.match("WoPhone")) {
                this.os.name = "WoPhone";
                if (match = /WoPhone\/([0-9\.]*)/.exec(g)) {
                    this.os.version = new M({value: match[1]})
                }
                this.device.type = "mobile"
            }
            if (g.match("BlackBerry")) {
                this.os.name = "BlackBerry OS";
                if (!g.match("Opera")) {
                    if (match = /BlackBerry([0-9]*)\/([0-9.]*)/.exec(g)) {
                        this.device.model = match[1];
                        this.os.version = new M({value: match[2], details: 2})
                    }
                    if (match = /; BlackBerry ([0-9]*);/.exec(g)) {
                        this.device.model = match[1]
                    }
                    if (match = /Version\/([0-9.]*)/.exec(g)) {
                        this.os.version = new M({value: match[1], details: 2})
                    }
                    if (this.os.version >= 10) {
                        this.os.name = "BlackBerry"
                    }
                    if (typeof this.device.model !== "undefined") {
                        if (typeof H[this.device.model] !== "undefined") {
                            this.device.model = "BlackBerry " + H[this.device.model] + " " + this.device.model
                        } else {
                            this.device.model = "BlackBerry " + this.device.model
                        }
                    } else {
                        this.device.model = "BlackBerry"
                    }
                } else {
                    this.device.model = "BlackBerry"
                }
                this.device.manufacturer = "RIM";
                this.device.type = "mobile";
                this.device.identified = true
            }
            if (g.match("RIM Tablet OS")) {
                this.os.name = "BlackBerry Tablet OS";
                this.os.version = new M({value: g.match(/RIM Tablet OS ([0-9.]*)/)[1], details: 2});
                this.device.manufacturer = "RIM";
                this.device.model = "BlackBerry PlayBook";
                this.device.type = "tablet";
                this.device.identified = true
            } else {
                if (g.match("PlayBook")) {
                    if (match = /Version\/(10[0-9.]*)/.exec(g)) {
                        this.os.name = "BlackBerry";
                        this.os.version = new M({value: match[1], details: 2});
                        this.device.manufacturer = "RIM";
                        this.device.model = "BlackBerry PlayBook";
                        this.device.type = "tablet";
                        this.device.identified = true
                    }
                }
            }
            if (g.match("(?:web|hpw)OS")) {
                this.os.name = "webOS";
                this.os.version = new M({value: g.match(/(?:web|hpw)OS\/([0-9.]*)/)[1]});
                if (g.match("tablet")) {
                    this.device.type = "tablet"
                } else {
                    this.device.type = "mobile"
                }
                this.device.manufacturer = g.match("hpwOS") ? "HP" : "Palm";
                if (g.match("Pre/1.0")) {
                    this.device.model = "Pre"
                }
                if (g.match("Pre/1.1")) {
                    this.device.model = "Pre Plus"
                }
                if (g.match("Pre/1.2")) {
                    this.device.model = "Pre2"
                }
                if (g.match("Pre/3.0")) {
                    this.device.model = "Pre3"
                }
                if (g.match("Pixi/1.0")) {
                    this.device.model = "Pixi"
                }
                if (g.match("Pixi/1.1")) {
                    this.device.model = "Pixi Plus"
                }
                if (g.match("P160UN?A?/1.0")) {
                    this.device.model = "Veer"
                }
                if (g.match("TouchPad/1.0")) {
                    this.device.model = "TouchPad"
                }
                if (g.match("Emulator/") || g.match("Desktop/")) {
                    this.device.type = "emulator";
                    this.device.manufacturer = null;
                    this.device.model = null
                }
                this.device.identified = true
            }
            if (g.match("Symbian") || g.match("Series[ ]?60") || g.match("S60")) {
                this.os.name = "Series60";
                if (g.match("SymbianOS/9.1") && !g.match("Series60")) {
                    this.os.version = new M({value: "3.0"})
                }
                if (match = /Series60\/([0-9.]*)/.exec(g)) {
                    this.os.version = new M({value: match[1]})
                }
                if (match = /Nokia([^\/;]+)[\/|;]/.exec(g)) {
                    if (match[1] !== "Browser") {
                        this.device.manufacturer = "Nokia";
                        this.device.model = match[1];
                        this.device.identified = true
                    }
                }
                if (match = /Vertu([^\/;]+)[\/|;]/.exec(g)) {
                    this.device.manufacturer = "Vertu";
                    this.device.model = match[1];
                    this.device.identified = true
                }
                if (match = /Symbian; U; ([^;]+); [a-z][a-z]\-[a-z][a-z]/i.exec(g)) {
                    this.device.manufacturer = "Nokia";
                    this.device.model = match[1];
                    this.device.identified = true
                }
                if (match = /Samsung\/([^;]*);/.exec(g)) {
                    this.device.manufacturer = B;
                    this.device.model = match[1];
                    this.device.identified = true
                }
                this.device.type = "mobile"
            }
            if (g.match("Series40")) {
                this.os.name = "Series40";
                if (match = /Nokia([^\/]+)\//.exec(g)) {
                    this.device.manufacturer = "Nokia";
                    this.device.model = match[1];
                    this.device.identified = true
                }
                this.device.type = "mobile"
            }
            if (g.match("MeeGo")) {
                this.os.name = "MeeGo";
                this.device.type = "mobile";
                if (match = /Nokia([^\)]+)\)/.exec(g)) {
                    this.device.manufacturer = "Nokia";
                    this.device.model = match[1];
                    this.device.identified = true
                }
            }
            if (g.match("Maemo")) {
                this.os.name = "Maemo";
                this.device.type = "mobile";
                if (match = /(N[0-9]+)/.exec(g)) {
                    this.device.manufacturer = "Nokia";
                    this.device.model = match[1];
                    this.device.identified = true
                }
            }
            if (g.match("Tizen")) {
                this.os.name = "Tizen";
                if (match = /Tizen[\/ ]([0-9.]*)/.exec(g)) {
                    this.os.version = new M({value: match[1]})
                }
                this.device.type = "mobile";
                if (match = /\(([^;]+); ([^\/]+)\//.exec(g)) {
                    if (match[1] !== "Linux") {
                        this.device.manufacturer = match[1];
                        this.device.model = match[2];
                        if (typeof G[this.device.manufacturer] !== "undefined" && typeof G[this.device.manufacturer][this.device.model] !== "undefined") {
                            var i = this.device.manufacturer;
                            var b = L(this.device.model);
                            this.device.manufacturer = G[i][b][0];
                            this.device.model = G[i][b][1];
                            this.device.identified = true
                        }
                    }
                }
            }
            if (g.match("[b|B]ada")) {
                this.os.name = "Bada";
                if (match = /[b|B]ada\/([0-9.]*)/.exec(g)) {
                    this.os.version = new M({value: match[1]})
                }
                this.device.type = "mobile";
                if (match = /\(([^;]+); ([^\/]+)\//.exec(g)) {
                    this.device.manufacturer = match[1];
                    this.device.model = L(match[2])
                }
                if (typeof P[this.device.manufacturer] !== "undefined" && typeof P[this.device.manufacturer][this.device.model] !== "undefined") {
                    var i = this.device.manufacturer;
                    var b = L(this.device.model);
                    this.device.manufacturer = P[i][b][0];
                    this.device.model = P[i][b][1];
                    this.device.identified = true
                }
            }
            if (g.match(/BREW/i) || g.match("BMP; U")) {
                this.os.name = "Brew";
                this.device.type = "mobile";
                if (match = /BREW; U; ([0-9.]*)/i.exec(g)) {
                    this.os.version = new M({value: match[1]})
                } else {
                    if (match = /;BREW\/([0-9.]*)/i.exec(g)) {
                        this.os.version = new M({value: match[1]})
                    }
                }
                if (match = /\(([^;]+);U;REX\/[^;]+;BREW\/[^;]+;(?:.*;)?[0-9]+\*[0-9]+;CTC\/2.0\)/.exec(g)) {
                    this.device.model = match[1]
                }
                if (this.device.model) {
                    var b = L(this.device.model);
                    if (typeof T[b] !== "undefined") {
                        this.device.manufacturer = T[b][0];
                        this.device.model = T[b][1];
                        this.device.identified = true
                    }
                }
            }
            if (g.match(/\(MTK;/)) {
                this.os.name = "MTK";
                this.device.type = "mobile"
            }
            if (g.match("CrOS")) {
                this.os.name = "Chrome OS";
                this.device.type = "desktop"
            }
            if (g.match("Joli OS")) {
                this.os.name = "Joli OS";
                this.device.type = "desktop";
                if (match = /Joli OS\/([0-9.]*)/i.exec(g)) {
                    this.os.version = new M({value: match[1]})
                }
            }
            if (g.match("Haiku")) {
                this.os.name = "Haiku";
                this.device.type = "desktop"
            }
            if (g.match("QNX")) {
                this.os.name = "QNX";
                this.device.type = "mobile"
            }
            if (g.match("OS/2; Warp")) {
                this.os.name = "OS/2 Warp";
                this.device.type = "desktop";
                if (match = /OS\/2; Warp ([0-9.]*)/i.exec(g)) {
                    this.os.version = new M({value: match[1]})
                }
            }
            if (g.match("Grid OS")) {
                this.os.name = "Grid OS";
                this.device.type = "tablet";
                if (match = /Grid OS ([0-9.]*)/i.exec(g)) {
                    this.os.version = new M({value: match[1]})
                }
            }
            if (g.match(/AmigaOS/i)) {
                this.os.name = "AmigaOS";
                this.device.type = "desktop";
                if (match = /AmigaOS ([0-9.]*)/i.exec(g)) {
                    this.os.version = new M({value: match[1]})
                }
            }
            if (g.match(/MorphOS/i)) {
                this.os.name = "MorphOS";
                this.device.type = "desktop";
                if (match = /MorphOS ([0-9.]*)/i.exec(g)) {
                    this.os.version = new M({value: match[1]})
                }
            }
            if (g.match("Kindle") && !g.match("Fire")) {
                this.os.name = "";
                this.device.manufacturer = "Amazon";
                this.device.model = "Kindle";
                this.device.type = "ereader";
                if (g.match("Kindle/2.0")) {
                    this.device.model = "Kindle 2"
                }
                if (g.match("Kindle/3.0")) {
                    this.device.model = "Kindle 3 or later"
                }
                this.device.identified = true
            }
            if (g.match("nook browser")) {
                this.os.name = "Android";
                this.device.manufacturer = "Barnes & Noble";
                this.device.model = "NOOK";
                this.device.type = "ereader";
                this.device.identified = true
            }
            if (g.match("bookeen/cybook")) {
                this.os.name = "";
                this.device.manufacturer = "Bookeen";
                this.device.model = "Cybook";
                this.device.type = "ereader";
                if (g.match("Orizon")) {
                    this.device.model = "Cybook Orizon"
                }
                this.device.identified = true
            }
            if (g.match("EBRD1101")) {
                this.os.name = "";
                this.device.manufacturer = "Sony";
                this.device.model = "Reader";
                this.device.type = "ereader";
                this.device.identified = true
            }
            if (g.match("Iriver ;")) {
                this.os.name = "";
                this.device.manufacturer = "iRiver";
                this.device.model = "Story";
                this.device.type = "ereader";
                if (g.match("EB07")) {
                    this.device.model = "Story HD EB07"
                }
                this.device.identified = true
            }
            if (g.match("Nintendo Wii")) {
                this.os.name = "";
                this.device.manufacturer = "Nintendo";
                this.device.model = "Wii";
                this.device.type = "gaming";
                this.device.identified = true
            }
            if (g.match("Nintendo DSi")) {
                this.os.name = "";
                this.device.manufacturer = "Nintendo";
                this.device.model = "DSi";
                this.device.type = "gaming";
                this.device.identified = true
            }
            if (g.match("Nintendo 3DS")) {
                this.os.name = "";
                this.device.manufacturer = "Nintendo";
                this.device.model = "3DS";
                this.device.type = "gaming";
                if (match = /Version\/([0-9.]*)/.exec(g)) {
                    this.os.version = new M({value: match[1]})
                }
                this.device.identified = true
            }
            if (g.match("PlayStation Portable")) {
                this.os.name = "";
                this.device.manufacturer = "Sony";
                this.device.model = "Playstation Portable";
                this.device.type = "gaming";
                this.device.identified = true
            }
            if (g.match("PlayStation Vita")) {
                this.os.name = "";
                if (match = /PlayStation Vita ([0-9.]*)/.exec(g)) {
                    this.os.version = new M({value: match[1]})
                }
                this.device.manufacturer = "Sony";
                this.device.model = "PlayStation Vita";
                this.device.type = "gaming";
                this.device.identified = true
            }
            if (g.match(/PlayStation 3/i)) {
                this.os.name = "";
                if (match = /PLAYSTATION 3;? ([0-9.]*)/.exec(g)) {
                    this.os.version = new M({value: match[1]})
                }
                this.device.manufacturer = "Sony";
                this.device.model = "Playstation 3";
                this.device.type = "gaming";
                this.device.identified = true
            }
            if (g.match("Viera")) {
                this.os.name = "";
                this.device.manufacturer = "Panasonic";
                this.device.model = "Smart Viera";
                this.device.type = "television";
                this.device.identified = true
            }
            if (g.match("AQUOSBrowser") || g.match("AQUOS-AS")) {
                this.os.name = "";
                this.device.manufacturer = J;
                this.device.model = "Aquos TV";
                this.device.type = "television";
                this.device.identified = true
            }
            if (g.match("SMART-TV")) {
                this.os.name = "";
                this.device.manufacturer = B;
                this.device.model = "Smart TV";
                this.device.type = "television";
                this.device.identified = true;
                if (match = /Maple([0-9]*)/.exec(g)) {
                    this.device.model += " " + match[1]
                }
            }
            if (g.match("SonyDTV|SonyBDP|SonyCEBrowser")) {
                this.os.name = "";
                this.device.manufacturer = "Sony";
                this.device.model = "Internet TV";
                this.device.type = "television";
                this.device.identified = true
            }
            if (g.match("NETTV/")) {
                this.os.name = "";
                this.device.manufacturer = "Philips";
                this.device.model = "Net TV";
                this.device.type = "television";
                this.device.identified = true
            }
            if (match = /LG NetCast\.(?:TV|Media)-([0-9]*)/.exec(g)) {
                this.os.name = "";
                this.device.manufacturer = R;
                this.device.model = "NetCast TV " + match[1];
                this.device.type = "television";
                this.device.identified = true
            }
            if (match = /LGSmartTV/.exec(g)) {
                this.os.name = "";
                this.device.manufacturer = R;
                this.device.model = "Smart TV";
                this.device.type = "television";
                this.device.identified = true
            }
            if (g.match("Toshiba_?TP/") || g.match("TSBNetTV/")) {
                this.os.name = "";
                this.device.manufacturer = "Toshiba";
                this.device.model = "Smart TV";
                this.device.type = "television";
                this.device.identified = true
            }
            if (match = /mbxtWebKit\/([0-9.]*)/.exec(g)) {
                this.os.name = "";
                this.browser.name = "MachBlue XT";
                this.browser.version = new M({value: match[1], details: 2});
                this.device.type = "television"
            }
            if (match = /\(ADB; ([^\)]+)\)/.exec(g)) {
                this.os.name = "";
                this.device.manufacturer = "ADB";
                this.device.model = (match[1] !== "Unknown" ? match[1].replace("ADB", "") + " " : "") + "IPTV receiver";
                this.device.type = "television";
                this.device.identified = true
            }
            if (g.match(/Mstar;OWB/)) {
                this.os.name = "";
                this.device.manufacturer = "MStar";
                this.device.model = "PVR";
                this.device.type = "television";
                this.device.identified = true;
                this.browser.name = "Origyn Web Browser"
            }
            if (match = /\TechniSat ([^;]+);/.exec(g)) {
                this.os.name = "";
                this.device.manufacturer = "TechniSat";
                this.device.model = match[1];
                this.device.type = "television";
                this.device.identified = true
            }
            if (match = /\Technicolor_([^;]+);/.exec(g)) {
                this.os.name = "";
                this.device.manufacturer = "Technicolor";
                this.device.model = match[1];
                this.device.type = "television";
                this.device.identified = true
            }
            if (match = /Winbox Evo2/.exec(g)) {
                this.os.name = "";
                this.device.manufacturer = "Winbox";
                this.device.model = "Evo2";
                this.device.type = "television";
                this.device.identified = true
            }
            if (match = /^Roku\/DVP-([0-9]+)/.exec(g)) {
                this.device.manufacturer = "Roku";
                this.device.type = "television";
                switch (match[1]) {
                    case"2000":
                        this.device.model = "HD";
                        break;
                    case"2050":
                        this.device.model = "XD";
                        break;
                    case"2100":
                        this.device.model = "XDS";
                        break;
                    case"2400":
                        this.device.model = "LT";
                        break;
                    case"3000":
                        this.device.model = "2 HD";
                        break;
                    case"3050":
                        this.device.model = "2 XD";
                        break;
                    case"3100":
                        this.device.model = "2 XS";
                        break
                }
                this.device.identified = true
            }
            if (match = /HbbTV\/1.1.1 \([^;]*;\s*([^;]*)\s*;\s*([^;]*)\s*;/.exec(g)) {
                var f = match[1].trim();
                var k = match[2].trim();
                if (!this.device.manufacturer && f !== "" && f !== "vendorName") {
                    switch (f) {
                        case"LGE":
                            this.device.manufacturer = "LG";
                            break;
                        case"TOSHIBA":
                            this.device.manufacturer = "Toshiba";
                            break;
                        case"smart":
                            this.device.manufacturer = "Smart";
                            break;
                        case"tv2n":
                            this.device.manufacturer = "TV2N";
                            break;
                        default:
                            this.device.manufacturer = f
                    }
                    if (!this.device.model && k !== "" && k !== "modelName") {
                        switch (k) {
                            case"GLOBAL_PLAT3":
                                this.device.model = "NetCast TV";
                                break;
                            case"SmartTV2012":
                                this.device.model = "Smart TV 2012";
                                break;
                            case"videoweb":
                                this.device.model = "Videoweb";
                                break;
                            default:
                                this.device.model = k
                        }
                        if (f === "Humax") {
                            this.device.model = this.device.model.toUpperCase()
                        }
                        this.device.identified = true;
                        this.os.name = ""
                    }
                }
                this.device.type = "television"
            }
            if (g.match("InettvBrowser")) {
                this.device.type = "television"
            }
            if (g.match("MIDP")) {
                this.device.type = "mobile"
            }
            if (!this.device.model && !this.device.manufacturer) {
                var c = [];
                if (!g.match(/^(Mozilla|Opera)/)) {
                    if (match = /^(?:MQQBrowser\/[0-9\.]+\/)?([^\s]+)/.exec(g)) {
                        match[1] = match[1].replace(/_TD$/, "");
                        match[1] = match[1].replace(/_CMCC$/, "");
                        match[1] = match[1].replace(/[_ ]Mozilla$/, "");
                        match[1] = match[1].replace(/ Linux$/, "");
                        match[1] = match[1].replace(/ Opera$/, "");
                        match[1] = match[1].replace(/\/[0-9].*$/, "");
                        c.push(match[1])
                    }
                }
                if (match = /[0-9]+x[0-9]+; ([^;]+)/.exec(g)) {
                    c.push(match[1])
                }
                if (match = /[0-9]+X[0-9]+ ([^;\/\(\)]+)/.exec(g)) {
                    c.push(match[1])
                }
                if (match = /Windows NT 5.1; ([^;]+); Windows Phone/.exec(g)) {
                    c.push(match[1])
                }
                if (match = /\) PPC; (?:[0-9]+x[0-9]+; )?([^;\/\(\)]+)/.exec(g)) {
                    c.push(match[1])
                }
                if (match = /\(([^;]+); U; Windows Mobile/.exec(g)) {
                    c.push(match[1])
                }
                if (match = /Vodafone\/1.0\/([^\/]+)/.exec(g)) {
                    c.push(match[1])
                }
                if (match = /\ ([^\s]+)$/.exec(g)) {
                    c.push(match[1])
                }
                for (var d = 0; d < c.length; d++) {
                    if (!this.device.model && !this.device.manufacturer) {
                        var b = L(c[d]);
                        var h = false;
                        if (this.os.name === "Android") {
                            if (typeof I[b] !== "undefined") {
                                this.device.manufacturer = I[b][0];
                                this.device.model = I[b][1];
                                if (typeof I[b][2] !== "undefined") {
                                    this.device.type = I[b][2]
                                }
                                this.device.identified = true;
                                h = true
                            }
                        }
                        if (!this.os.name || this.os.name === "Windows" || this.os.name === "Windows Mobile" || this.os.name === "Windows CE") {
                            if (typeof z[b] !== "undefined") {
                                this.device.manufacturer = z[b][0];
                                this.device.model = z[b][1];
                                this.device.type = "mobile";
                                this.device.identified = true;
                                if (this.os.name !== "Windows Mobile") {
                                    this.os.name = "Windows Mobile";
                                    this.os.version = null
                                }
                                h = true
                            }
                        }
                    }
                    if (!h) {
                        if (match = /^GIONEE-([^\s]+)/.exec(c[d])) {
                            this.device.manufacturer = "Gionee";
                            this.device.model = L(match[1]);
                            this.device.type = "mobile";
                            this.device.identified = true
                        }
                        if (match = /^HTC_?([^\/_]+)(?:\/|_|$)/.exec(c[d])) {
                            this.device.manufacturer = A;
                            this.device.model = L(match[1]);
                            this.device.type = "mobile";
                            this.device.identified = true
                        }
                        if (match = /^HUAWEI-([^\/]*)/.exec(c[d])) {
                            this.device.manufacturer = K;
                            this.device.model = L(match[1]);
                            this.device.type = "mobile";
                            this.device.identified = true
                        }
                        if (match = /(?:^|\()LGE?(?:\/|-|_|\s)([^\s]*)/.exec(c[d])) {
                            this.device.manufacturer = R;
                            this.device.model = L(match[1]);
                            this.device.type = "mobile";
                            this.device.identified = true
                        }
                        if (match = /^MOT-([^\/_]+)(?:\/|_|$)/.exec(c[d])) {
                            this.device.manufacturer = F;
                            this.device.model = L(match[1]);
                            this.device.type = "mobile";
                            this.device.identified = true
                        }
                        if (match = /^Motorola_([^\/_]+)(?:\/|_|$)/.exec(c[d])) {
                            this.device.manufacturer = F;
                            this.device.model = L(match[1]);
                            this.device.type = "mobile";
                            this.device.identified = true
                        }
                        if (match = /^Nokia([^\/]+)(?:\/|$)/.exec(c[d])) {
                            this.device.manufacturer = "Nokia";
                            this.device.model = L(match[1]);
                            this.device.type = "mobile";
                            this.device.identified = true;
                            if (!this.os.name) {
                                this.os.name = "Series40"
                            }
                        }
                        if (match = /^SonyEricsson([^\/_]+)(?:\/|_|$)/.exec(c[d])) {
                            this.device.manufacturer = Q;
                            this.device.model = L(match[1]);
                            this.device.type = "mobile";
                            this.device.identified = true
                        }
                        if (match = /^SAMSUNG-([^\/_]+)(?:\/|_|$)/.exec(c[d])) {
                            this.device.manufacturer = B;
                            this.device.model = L(match[1]);
                            this.device.type = "mobile";
                            if (this.os.name === "Bada") {
                                var i = "SAMSUNG";
                                var b = L(this.device.model);
                                if (typeof P[i] !== "undefined" && typeof P[i][b] !== "undefined") {
                                    this.device.manufacturer = P[i][b][0];
                                    this.device.model = P[i][b][1];
                                    this.device.identified = true
                                }
                            } else {
                                if (match = /Jasmine\/([0-9.]*)/.exec(g)) {
                                    var a = match[1];
                                    var i = "SAMSUNG";
                                    var b = L(this.device.model);
                                    if (typeof x[i] !== "undefined" && typeof x[i][b] !== "undefined") {
                                        this.device.manufacturer = x[i][b][0];
                                        this.device.model = x[i][b][1];
                                        this.device.identified = true;
                                        this.os.name = "Touchwiz";
                                        this.os.version = new M({value: "2.0"})
                                    }
                                } else {
                                    if (match = /Dolfin\/([0-9.]*)/.exec(g)) {
                                        var a = match[1];
                                        var i = "SAMSUNG";
                                        var b = L(this.device.model);
                                        if (typeof P[i] !== "undefined" && typeof P[i][b] !== "undefined") {
                                            this.device.manufacturer = P[i][b][0];
                                            this.device.model = P[i][b][1];
                                            this.device.identified = true;
                                            this.os.name = "Bada";
                                            switch (a) {
                                                case"2.0":
                                                    this.os.version = new M({value: "1.0"});
                                                    break;
                                                case"2.2":
                                                    this.os.version = new M({value: "1.2"});
                                                    break;
                                                case"3.0":
                                                    this.os.version = new M({value: "2.0"});
                                                    break
                                            }
                                        }
                                        if (typeof x[i] !== "undefined" && typeof x[i][b] !== "undefined") {
                                            this.device.manufacturer = x[i][b][0];
                                            this.device.model = x[i][b][1];
                                            this.device.identified = true;
                                            this.os.name = "Touchwiz";
                                            switch (a) {
                                                case"1.0":
                                                    this.os.version = new M({value: "1.0"});
                                                    break;
                                                case"1.5":
                                                    this.os.version = new M({value: "2.0"});
                                                    break;
                                                case"2.0":
                                                    this.os.version = new M({value: "3.0"});
                                                    break
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            if (match = /\((?:LG[-|\/])(.*) (?:Browser\/)?AppleWebkit/.exec(g)) {
                this.device.manufacturer = R;
                this.device.model = match[1];
                this.device.type = "mobile";
                this.device.identified = true
            }
            if (match = /^Mozilla\/5.0 \((?:Nokia|NOKIA)(?:\s?)([^\)]+)\)UC AppleWebkit\(like Gecko\) Safari\/530$/.exec(g)) {
                this.device.manufacturer = "Nokia";
                this.device.model = match[1];
                this.device.type = "mobile";
                this.device.identified = true;
                this.os.name = "Series60"
            }
            if (g.match("Safari")) {
                if (this.os.name === "iOS") {
                    this.browser.stock = true;
                    this.browser.hidden = true;
                    this.browser.name = "Safari";
                    this.browser.version = null
                }
                if (this.os.name === "Mac OS X" || this.os.name === "Windows") {
                    this.browser.name = "Safari";
                    this.browser.stock = this.os.name === "Mac OS X";
                    if (match = /Version\/([0-9\.]+)/.exec(g)) {
                        this.browser.version = new M({value: match[1]})
                    }
                    if (g.match(/AppleWebKit\/[0-9\.]+\+/)) {
                        this.browser.name = "WebKit Nightly Build";
                        this.browser.version = null
                    }
                }
            }
            if (g.match("MSIE")) {
                this.browser.name = "Internet Explorer";
                if (g.match("IEMobile") || g.match("Windows CE") || g.match("Windows Phone") || g.match("WP7")) {
                    this.browser.name = "Mobile Internet Explorer"
                }
                if (match = /MSIE ([0-9.]*)/.exec(g)) {
                    this.browser.version = new M({value: match[1]})
                }
            }
            if (g.match(/Opera/i)) {
                this.browser.stock = false;
                this.browser.name = "Opera";
                if (match = /Opera[\/| ]([0-9.]*)/.exec(g)) {
                    this.browser.version = new M({value: match[1]})
                }
                if (match = /Version\/([0-9.]*)/.exec(g)) {
                    if (parseFloat(match[1]) >= 10) {
                        this.browser.version = new M({value: match[1]})
                    } else {
                        this.browser.version = null
                    }
                }
                if (this.browser.version && g.match("Edition Labs")) {
                    this.browser.version.type = "alpha";
                    this.browser.channel = "Labs"
                }
                if (this.browser.version && g.match("Edition Next")) {
                    this.browser.version.type = "alpha";
                    this.browser.channel = "Next"
                }
                if (g.match("Opera Tablet")) {
                    this.browser.name = "Opera Mobile";
                    this.device.type = "tablet"
                }
                if (g.match("Opera Mobi")) {
                    this.browser.name = "Opera Mobile";
                    this.device.type = "mobile"
                }
                if (match = /Opera Mini;/.exec(g)) {
                    this.browser.name = "Opera Mini";
                    this.browser.version = null;
                    this.browser.mode = "proxy";
                    this.device.type = "mobile"
                }
                if (match = /Opera Mini\/(?:att\/)?([0-9.]*)/.exec(g)) {
                    this.browser.name = "Opera Mini";
                    this.browser.version = new M({value: match[1], details: -1});
                    this.browser.mode = "proxy";
                    this.device.type = "mobile"
                }
                if (this.browser.name === "Opera" && this.device.type === "mobile") {
                    this.browser.name = "Opera Mobile";
                    if (g.match(/BER/)) {
                        this.browser.name = "Opera Mini";
                        this.browser.version = null
                    }
                }
                if (g.match("InettvBrowser")) {
                    this.device.type = "television"
                }
                if (g.match("Opera TV") || g.match("Opera-TV")) {
                    this.browser.name = "Opera";
                    this.device.type = "television"
                }
                if (g.match("Linux zbov")) {
                    this.browser.name = "Opera Mobile";
                    this.browser.mode = "desktop";
                    this.device.type = "mobile";
                    this.os.name = null;
                    this.os.version = null
                }
                if (g.match("Linux zvav")) {
                    this.browser.name = "Opera Mini";
                    this.browser.version = null;
                    this.browser.mode = "desktop";
                    this.device.type = "mobile";
                    this.os.name = null;
                    this.os.version = null
                }
            }
            if (g.match("Firefox")) {
                this.browser.stock = false;
                this.browser.name = "Firefox";
                if (match = /Firefox\/([0-9ab.]*)/.exec(g)) {
                    this.browser.version = new M({value: match[1]})
                }
                if (this.browser.version.type === "alpha") {
                    this.browser.channel = "Aurora"
                }
                if (this.browser.version.type === "beta") {
                    this.browser.channel = "Beta"
                }
                if (g.match("Fennec")) {
                    this.device.type = "mobile"
                }
                if (g.match("Mobile; rv")) {
                    this.device.type = "mobile"
                }
                if (g.match("Tablet; rv")) {
                    this.device.type = "tablet"
                }
                if (this.device.type === "mobile" || this.device.type === "tablet") {
                    this.browser.name = "Firefox Mobile"
                }
            }
            if (g.match("Namoroka")) {
                this.browser.stock = false;
                this.browser.name = "Firefox";
                if (match = /Namoroka\/([0-9ab.]*)/.exec(g)) {
                    this.browser.version = new M({value: match[1]})
                }
                this.browser.channel = "Namoroka"
            }
            if (g.match("Shiretoko")) {
                this.browser.stock = false;
                this.browser.name = "Firefox";
                if (match = /Shiretoko\/([0-9ab.]*)/.exec(g)) {
                    this.browser.version = new M({value: match[1]})
                }
                this.browser.channel = "Shiretoko"
            }
            if (g.match("Minefield")) {
                this.browser.stock = false;
                this.browser.name = "Firefox";
                if (match = /Minefield\/([0-9ab.]*)/.exec(g)) {
                    this.browser.version = new M({value: match[1]})
                }
                this.browser.channel = "Minefield"
            }
            if (g.match("Firebird")) {
                this.browser.stock = false;
                this.browser.name = "Firebird";
                if (match = /Firebird\/([0-9ab.]*)/.exec(g)) {
                    this.browser.version = new M({value: match[1]})
                }
            }
            if (g.match("SeaMonkey")) {
                this.browser.stock = false;
                this.browser.name = "SeaMonkey";
                if (match = /SeaMonkey\/([0-9.]*)/.exec(g)) {
                    this.browser.version = new M({value: match[1]})
                }
            }
            if (g.match("Netscape")) {
                this.browser.stock = false;
                this.browser.name = "Netscape";
                if (match = /Netscape[0-9]?\/([0-9.]*)/.exec(g)) {
                    this.browser.version = new M({value: match[1]})
                }
            }
            if (g.match("[k|K]onqueror/")) {
                this.browser.name = "Konqueror";
                if (match = /[k|K]onqueror\/([0-9.]*)/.exec(g)) {
                    this.browser.version = new M({value: match[1]})
                }
            }
            if (match = /(?:Chrome|CrMo|CriOS)\/([0-9.]*)/.exec(g)) {
                this.browser.stock = false;
                this.browser.name = "Chrome";
                this.browser.version = new M({value: match[1]});
                if (this.os.name === "Android") {
                    switch (match[1].split(".", 3).join(".")) {
                        case"16.0.912":
                            this.browser.channel = "Beta";
                            break;
                        case"18.0.1025":
                            this.browser.version.details = 1;
                            break;
                        default:
                            this.browser.channel = "Nightly";
                            break
                    }
                } else {
                    switch (match[1].split(".", 3).join(".")) {
                        case"0.2.149":
                        case"0.3.154":
                        case"0.4.154":
                        case"1.0.154":
                        case"2.0.172":
                        case"3.0.195":
                        case"4.0.249":
                        case"4.1.249":
                        case"5.0.375":
                        case"6.0.472":
                        case"7.0.517":
                        case"8.0.552":
                        case"9.0.597":
                        case"10.0.648":
                        case"11.0.696":
                        case"12.0.742":
                        case"13.0.782":
                        case"14.0.835":
                        case"15.0.874":
                        case"16.0.912":
                        case"17.0.963":
                        case"18.0.1025":
                        case"19.0.1084":
                        case"20.0.1132":
                        case"21.0.1180":
                            if (this.browser.version.minor === 0) {
                                this.browser.version.details = 1
                            } else {
                                this.browser.version.details = 2
                            }
                            break;
                        default:
                            this.browser.channel = "Nightly";
                            break
                    }
                }
            }
            if (g.match("chromeframe")) {
                this.browser.stock = false;
                this.browser.name = "Chrome Frame";
                if (match = /chromeframe\/([0-9.]*)/.exec(g)) {
                    this.browser.version = new M({value: match[1]})
                }
            }
            if (g.match("Chromium")) {
                this.browser.stock = false;
                this.browser.channel = "";
                this.browser.name = "Chromium";
                if (match = /Chromium\/([0-9.]*)/.exec(g)) {
                    this.browser.version = new M({value: match[1]})
                }
            }
            if (g.match("BrowserNG")) {
                this.browser.name = "Nokia Browser";
                if (match = /BrowserNG\/([0-9.]*)/.exec(g)) {
                    this.browser.version = new M({value: match[1], details: 3, builds: false})
                }
            }
            if (g.match("NokiaBrowser")) {
                this.browser.name = "Nokia Browser";
                if (match = /NokiaBrowser\/([0-9.]*)/.exec(g)) {
                    this.browser.version = new M({value: match[1], details: 3})
                }
            }
            if (g.match("Maemo[ |_]Browser")) {
                this.browser.name = "MicroB";
                if (match = /Maemo[ |_]Browser[ |_]([0-9.]*)/.exec(g)) {
                    this.browser.version = new M({value: match[1], details: 3})
                }
            }
            if (g.match("NetFront")) {
                this.browser.name = "NetFront";
                this.device.type = "mobile";
                if (match = /NetFront\/([0-9.]*)/.exec(g)) {
                    this.browser.version = new M({value: match[1]})
                }
                if (g.match("InettvBrowser")) {
                    this.device.type = "television"
                }
            }
            if (g.match("Silk")) {
                if (g.match("Silk-Accelerated")) {
                    this.browser.name = "Silk";
                    if (match = /Silk\/([0-9.]*)/.exec(g)) {
                        this.browser.version = new M({value: match[1], details: 2})
                    }
                    this.device.manufacturer = "Amazon";
                    this.device.model = "Kindle Fire";
                    this.device.type = "tablet";
                    this.device.identified = true;
                    if (this.os.name !== "Android") {
                        this.os.name = "Android";
                        this.os.version = null
                    }
                }
            }
            if (g.match("Dolfin")) {
                this.browser.name = "Dolfin";
                if (match = /Dolfin\/([0-9.]*)/.exec(g)) {
                    this.browser.version = new M({value: match[1]})
                }
            }
            if (g.match("Iris")) {
                this.browser.name = "Iris";
                this.device.type = "mobile";
                this.device.model = null;
                this.device.manufacturer = null;
                this.os.name = "Windows Mobile";
                this.os.version = null;
                if (match = /Iris\/([0-9.]*)/.exec(g)) {
                    this.browser.version = new M({value: match[1]})
                }
                if (match = / WM([0-9]) /.exec(g)) {
                    this.os.version = new M({value: match[1] + ".0"})
                } else {
                    this.browser.mode = "desktop"
                }
            }
            if (g.match("Jasmine")) {
                this.browser.name = "Jasmine";
                if (match = /Jasmine\/([0-9.]*)/.exec(g)) {
                    this.browser.version = new M({value: match[1]})
                }
            }
            if (g.match("Boxee")) {
                this.browser.name = "Boxee";
                this.device.type = "television";
                if (match = /Boxee\/([0-9.]*)/.exec(g)) {
                    this.browser.version = new M({value: match[1]})
                }
            }
            if (g.match("Espial")) {
                this.browser.name = "Espial";
                this.os.name = "";
                this.os.version = null;
                if (this.device.type !== "television") {
                    this.device.type = "television";
                    this.device.model = null;
                    this.device.manufacturer = null
                }
                if (match = /Espial\/([0-9.]*)/.exec(g)) {
                    this.browser.version = new M({value: match[1]})
                }
            }
            if (match = /ANTGalio\/([0-9.]*)/.exec(g)) {
                this.browser.name = "ANT Galio";
                this.browser.version = new M({value: match[1], details: 3});
                this.device.type = "television"
            }
            if (match = /NX\/([0-9.]*)/.exec(g)) {
                this.browser.name = "NetFront NX";
                this.browser.version = new M({value: match[1], details: 2});
                if (match = /DTV/i.exec(g)) {
                    this.device.type = "television"
                } else {
                    if (match = /mobile/i.exec(g)) {
                        this.device.type = "mobile"
                    } else {
                        this.device.type = "desktop"
                    }
                }
                this.os.name = null;
                this.os.version = null
            }
            if (g.match(/Obigo/i)) {
                this.browser.name = "Obigo";
                if (match = /Obigo\/([0-9.]*)/i.exec(g)) {
                    this.browser.version = new M({value: match[1]})
                }
                if (match = /Obigo\/([A-Z])([0-9.]*)/i.exec(g)) {
                    this.browser.name = "Obigo " + match[1];
                    this.browser.version = new M({value: match[2]})
                }
                if (match = /Obigo-([A-Z])([0-9.]*)\//i.exec(g)) {
                    this.browser.name = "Obigo " + match[1];
                    this.browser.version = new M({value: match[2]})
                }
            }
            if (g.match("UCWEB")) {
                this.browser.stock = false;
                this.browser.name = "UC Browser";
                if (match = /UCWEB([0-9]*[.][0-9]*)/.exec(g)) {
                    this.browser.version = new M({value: match[1], details: 3})
                }
                if (this.os.name === "Linux") {
                    this.os.name = ""
                }
                this.device.type = "mobile";
                if (match = /^IUC \(U;\s?iOS ([0-9\.]+);/.exec(g)) {
                    this.os.name = "iOS";
                    this.os.version = new M({value: match[1]})
                }
                if (match = /^JUC \(Linux; U; ([0-9\.]+)[^;]*; [^;]+; ([^;]*[^\s])\s*; [0-9]+\*[0-9]+\)/.exec(g)) {
                    var b = L(match[2]);
                    this.os.name = "Android";
                    this.os.version = new M({value: match[1]});
                    if (typeof I[b] !== "undefined") {
                        this.device.manufacturer = I[b][0];
                        this.device.model = I[b][1];
                        if (typeof I[b][2] !== "undefined") {
                            this.device.type = I[b][2]
                        }
                        this.device.identified = true
                    }
                }
            }
            if (g.match(/\) UC /)) {
                this.browser.stock = false;
                this.browser.name = "UC Browser"
            }
            if (match = /UCBrowser\/([0-9.]*)/.exec(g)) {
                this.browser.stock = false;
                this.browser.name = "UC Browser";
                this.browser.version = new M({value: match[1], details: 2})
            }
            if (match = /Ninesky(?:-android-mobile(?:-cn)?)?\/([0-9.]*)/.exec(g)) {
                this.browser.name = "NineSky";
                this.browser.version = new M({value: match[1]});
                if (this.os.name !== "Android") {
                    this.os.name = "Android";
                    this.os.version = null;
                    this.device.manufacturer = null;
                    this.device.model = null
                }
            }
            if (match = /Skyfire\/([0-9.]*)/.exec(g)) {
                this.browser.name = "Skyfire";
                this.browser.version = new M({value: match[1]});
                this.device.type = "mobile";
                this.os.name = "Android";
                this.os.version = null
            }
            if (match = /DolphinHDCN\/([0-9.]*)/.exec(g)) {
                this.browser.name = "Dolphin";
                this.browser.version = new M({value: match[1]});
                this.device.type = "mobile";
                if (this.os.name !== "Android") {
                    this.os.name = "Android";
                    this.os.version = null
                }
            }
            if (match = /Dolphin\/INT/.exec(g)) {
                this.browser.name = "Dolphin";
                this.device.type = "mobile"
            }
            if (match = /(M?QQBrowser)\/([0-9.]*)/.exec(g)) {
                this.browser.name = "QQ Browser";
                var a = match[2];
                if (a.match(/^[0-9][0-9]$/)) {
                    a = a[0] + "." + a[1]
                }
                this.browser.version = new M({value: a, details: 2});
                this.browser.channel = "";
                if (!this.os.name && match[1] === "QQBrowser") {
                    this.os.name = "Windows"
                }
            }
            if (match = /(iBrowser)\/([0-9.]*)/.exec(g)) {
                this.browser.name = "iBrowser";
                var a = match[2];
                if (a.match(/[0-9][0-9]/)) {
                    a = a[0] + "." + a[1]
                }
                this.browser.version = new M({value: a, details: 2});
                this.browser.channel = ""
            }
            if (match = /Puffin\/([0-9.]*)/.exec(g)) {
                this.browser.name = "Puffin";
                this.browser.version = new M({value: match[1], details: 2});
                this.device.type = "mobile";
                if (this.os.name === "Linux") {
                    this.os.name = null;
                    this.os.version = null
                }
            }
            if (g.match("360EE")) {
                this.browser.stock = false;
                this.browser.name = "360 Extreme Explorer";
                this.browser.version = null
            }
            if (match = /Midori\/([0-9.]*)/.exec(g)) {
                this.browser.name = "Midori";
                this.browser.version = new M({value: match[1]});
                if (this.os.name !== "Linux") {
                    this.os.name = "Linux";
                    this.os.version = null
                }
                this.device.manufacturer = null;
                this.device.model = null;
                this.device.type = "desktop"
            }
            var e = [{name: "AdobeAIR", regexp: /AdobeAIR\/([0-9.]*)/}, {
                name: "Awesomium",
                regexp: /Awesomium\/([0-9.]*)/
            }, {name: "Canvace", regexp: /Canvace Standalone\/([0-9.]*)/}, {
                name: "Ekioh",
                regexp: /Ekioh\/([0-9.]*)/
            }, {name: "JavaFX", regexp: /JavaFX\/([0-9.]*)/}, {
                name: "GFXe",
                regexp: /GFXe\/([0-9.]*)/
            }, {name: "LuaKit", regexp: /luakit/}, {
                name: "Titanium",
                regexp: /Titanium\/([0-9.]*)/
            }, {name: "OpenWebKitSharp", regexp: /OpenWebKitSharp/}, {
                name: "Prism",
                regexp: /Prism\/([0-9.]*)/
            }, {name: "Qt", regexp: /Qt\/([0-9.]*)/}, {name: "QtEmbedded", regexp: /QtEmbedded/}, {
                name: "QtEmbedded",
                regexp: /QtEmbedded.*Qt\/([0-9.]*)/
            }, {name: "RhoSimulator", regexp: /RhoSimulator/}, {
                name: "UWebKit",
                regexp: /UWebKit\/([0-9.]*)/
            }, {name: "PhantomJS", regexp: /PhantomJS\/([0-9.]*)/}, {
                name: "Google Web Preview",
                regexp: /Google Web Preview/
            }, {name: "Google Earth", regexp: /Google Earth\/([0-9.]*)/}, {
                name: "EA Origin",
                regexp: /Origin\/([0-9.]*)/
            }, {name: "SecondLife", regexp: /SecondLife\/([0-9.]*)/}, {
                name: "Valve Steam",
                regexp: /Valve Steam/
            }, {name: "Songbird", regexp: /Songbird\/([0-9.]*)/}, {
                name: "Thunderbird",
                regexp: /Thunderbird\/([0-9.]*)/
            }, {name: "Abrowser", regexp: /Abrowser\/([0-9.]*)/}, {
                name: "arora",
                regexp: /[Aa]rora\/([0-9.]*)/
            }, {name: "Baidu Browser", regexp: /M?BaiduBrowser\/([0-9.]*)/i}, {
                name: "Camino",
                regexp: /Camino\/([0-9.]*)/
            }, {name: "Canure", regexp: /Canure\/([0-9.]*)/, details: 3}, {
                name: "CometBird",
                regexp: /CometBird\/([0-9.]*)/
            }, {name: "Comodo Dragon", regexp: /Comodo_Dragon\/([0-9.]*)/, details: 2}, {
                name: "Conkeror",
                regexp: /[Cc]onkeror\/([0-9.]*)/
            }, {
                name: "CoolNovo",
                regexp: /(?:CoolNovo|CoolNovoChromePlus)\/([0-9.]*)/,
                details: 3
            }, {name: "ChromePlus", regexp: /ChromePlus(?:\/([0-9.]*))?$/, details: 3}, {
                name: "Daedalus",
                regexp: /Daedalus ([0-9.]*)/,
                details: 2
            }, {name: "Demobrowser", regexp: /demobrowser\/([0-9.]*)/}, {
                name: "Dooble",
                regexp: /Dooble(?:\/([0-9.]*))?/
            }, {name: "DWB", regexp: /dwb(?:-hg)?(?:\/([0-9.]*))?/}, {
                name: "Epiphany",
                regexp: /Epiphany\/([0-9.]*)/
            }, {name: "FireWeb", regexp: /FireWeb\/([0-9.]*)/}, {
                name: "Flock",
                regexp: /Flock\/([0-9.]*)/,
                details: 3
            }, {name: "Galeon", regexp: /Galeon\/([0-9.]*)/, details: 3}, {
                name: "Helium",
                regexp: /HeliumMobileBrowser\/([0-9.]*)/
            }, {name: "iCab", regexp: /iCab\/([0-9.]*)/}, {
                name: "Iceape",
                regexp: /Iceape\/([0-9.]*)/
            }, {name: "IceCat", regexp: /IceCat ([0-9.]*)/}, {
                name: "Iceweasel",
                regexp: /Iceweasel\/([0-9.]*)/
            }, {name: "InternetSurfboard", regexp: /InternetSurfboard\/([0-9.]*)/}, {
                name: "Iron",
                regexp: /Iron\/([0-9.]*)/,
                details: 2
            }, {name: "Isis", regexp: /BrowserServer/}, {name: "Jumanji", regexp: /jumanji/}, {
                name: "Kazehakase",
                regexp: /Kazehakase\/([0-9.]*)/
            }, {name: "KChrome", regexp: /KChrome\/([0-9.]*)/, details: 3}, {
                name: "K-Meleon",
                regexp: /K-Meleon\/([0-9.]*)/
            }, {name: "Leechcraft", regexp: /Leechcraft(?:\/([0-9.]*))?/, details: 2}, {
                name: "Lightning",
                regexp: /Lightning\/([0-9.]*)/
            }, {name: "Lunascape", regexp: /Lunascape[\/| ]([0-9.]*)/, details: 3}, {
                name: "iLunascape",
                regexp: /iLunascape\/([0-9.]*)/,
                details: 3
            }, {name: "Maxthon", regexp: /Maxthon[\/ ]([0-9.]*)/, details: 3}, {
                name: "MiniBrowser",
                regexp: /MiniBr?owserM\/([0-9.]*)/
            }, {name: "MiniBrowser", regexp: /MiniBrowserMobile\/([0-9.]*)/}, {
                name: "MixShark",
                regexp: /MixShark\/([0-9.]*)/
            }, {
                name: "Motorola WebKit",
                regexp: /MotorolaWebKit\/([0-9.]*)/,
                details: 3
            }, {name: "NetFront LifeBrowser", regexp: /NetFrontLifeBrowser\/([0-9.]*)/}, {
                name: "Netscape Navigator",
                regexp: /Navigator\/([0-9.]*)/,
                details: 3
            }, {name: "Odyssey", regexp: /OWB\/([0-9.]*)/}, {name: "OmniWeb", regexp: /OmniWeb/}, {
                name: "Orca",
                regexp: /Orca\/([0-9.]*)/
            }, {name: "Origyn", regexp: /Origyn Web Browser/}, {
                name: "Palemoon",
                regexp: /Pale[mM]oon\/([0-9.]*)/
            }, {name: "Phantom", regexp: /Phantom\/V([0-9.]*)/}, {
                name: "Polaris",
                regexp: /Polaris\/v?([0-9.]*)/i,
                details: 2
            }, {name: "QtCreator", regexp: /QtCreator\/([0-9.]*)/}, {
                name: "QtQmlViewer",
                regexp: /QtQmlViewer/
            }, {name: "QtTestBrowser", regexp: /QtTestBrowser\/([0-9.]*)/}, {
                name: "QtWeb",
                regexp: /QtWeb Internet Browser\/([0-9.]*)/
            }, {name: "QupZilla", regexp: /QupZilla\/([0-9.]*)/}, {
                name: "Roccat",
                regexp: /Roccat\/([0-9]\.[0-9.]*)/
            }, {name: "Raven for Mac", regexp: /Raven for Mac\/([0-9.]*)/}, {
                name: "rekonq",
                regexp: /rekonq/
            }, {name: "RockMelt", regexp: /RockMelt\/([0-9.]*)/, details: 2}, {
                name: "Sleipnir",
                regexp: /Sleipnir\/([0-9.]*)/,
                details: 3
            }, {name: "SMBrowser", regexp: /SMBrowser/}, {
                name: "Sogou Explorer",
                regexp: /SE 2.X MetaSr/
            }, {name: "Snowshoe", regexp: /Snowshoe\/([0-9.]*)/, details: 2}, {
                name: "Sputnik",
                regexp: /Sputnik\/([0-9.]*)/i,
                details: 3
            }, {name: "Stainless", regexp: /Stainless\/([0-9.]*)/}, {
                name: "SunChrome",
                regexp: /SunChrome\/([0-9.]*)/
            }, {name: "Surf", regexp: /Surf\/([0-9.]*)/}, {
                name: "TaoBrowser",
                regexp: /TaoBrowser\/([0-9.]*)/,
                details: 2
            }, {name: "TaomeeBrowser", regexp: /TaomeeBrowser\/([0-9.]*)/, details: 2}, {
                name: "TazWeb",
                regexp: /TazWeb/
            }, {name: "Viera", regexp: /Viera\/([0-9.]*)/}, {
                name: "Villanova",
                regexp: /Villanova\/([0-9.]*)/,
                details: 3
            }, {
                name: "Wavelink Velocity",
                regexp: /Wavelink Velocity Browser\/([0-9.]*)/,
                details: 2
            }, {name: "WebPositive", regexp: /WebPositive/}, {name: "WebRender", regexp: /WebRender/}, {
                name: "Wyzo",
                regexp: /Wyzo\/([0-9.]*)/,
                details: 3
            }, {name: "Zetakey", regexp: /Zetakey Webkit\/([0-9.]*)/}, {name: "Zetakey", regexp: /Zetakey\/([0-9.]*)/}];
            for (var j = 0; j < e.length; j++) {
                if (match = e[j].regexp.exec(g)) {
                    this.browser.name = e[j].name;
                    this.browser.channel = "";
                    this.browser.stock = false;
                    if (match[1]) {
                        this.browser.version = new M({value: match[1], details: e[j].details || null})
                    } else {
                        this.browser.version = null
                    }
                }
            }
            if (match = /WebKit\/([0-9.]*)/i.exec(g)) {
                this.engine.name = "Webkit";
                this.engine.version = new M({value: match[1]})
            }
            if (match = /Browser\/AppleWebKit([0-9.]*)/i.exec(g)) {
                this.engine.name = "Webkit";
                this.engine.version = new M({value: match[1]})
            }
            if (match = /KHTML\/([0-9.]*)/.exec(g)) {
                this.engine.name = "KHTML";
                this.engine.version = new M({value: match[1]})
            }
            if (/Gecko/.exec(g) && !/like Gecko/i.exec(g)) {
                this.engine.name = "Gecko";
                if (match = /; rv:([^\)]+)\)/.exec(g)) {
                    this.engine.version = new M({value: match[1]})
                }
            }
            if (match = /Presto\/([0-9.]*)/.exec(g)) {
                this.engine.name = "Presto";
                this.engine.version = new M({value: match[1]})
            }
            if (match = /Trident\/([0-9.]*)/.exec(g)) {
                this.engine.name = "Trident";
                this.engine.version = new M({value: match[1]});
                if (this.browser.name === "Internet Explorer") {
                    if (S(this.engine.version) === 6 && parseFloat(this.browser.version) < 10) {
                        this.browser.version = new M({value: "10.0"});
                        this.browser.mode = "compat"
                    }
                    if (S(this.engine.version) === 5 && parseFloat(this.browser.version) < 9) {
                        this.browser.version = new M({value: "9.0"});
                        this.browser.mode = "compat"
                    }
                    if (S(this.engine.version) === 4 && parseFloat(this.browser.version) < 8) {
                        this.browser.version = new M({value: "8.0"});
                        this.browser.mode = "compat"
                    }
                }
                if (this.os.name === "Windows Phone") {
                    if (S(this.engine.version) === 5 && parseFloat(this.os.version) < 7.5) {
                        this.os.version = new M({value: "7.5"})
                    }
                }
            }
            if (this.os.name === "Android" && this.browser.stock) {
                this.browser.hidden = true
            }
            if (this.os.name === "iOS" && this.browser.name === "Opera Mini") {
                this.os.version = null
            }
            if (this.browser.name === "Midori" && this.engine.name !== "Webkit") {
                this.engine.name = "Webkit";
                this.engine.version = null
            }
            if (this.device.type === "television" && this.browser.name === "Opera") {
                this.browser.name = "Opera Devices";
                switch (true) {
                    case this.engine.version.is("2.10"):
                        this.browser.version = new M({value: 3.2});
                        break;
                    case this.engine.version.is("2.9"):
                        this.browser.version = new M({value: 3.1});
                        break;
                    case this.engine.version.is("2.8"):
                        this.browser.version = new M({value: 3});
                        break;
                    case this.engine.version.is("2.7"):
                        this.browser.version = new M({value: 2.9});
                        break;
                    case this.engine.version.is("2.6"):
                        this.browser.version = new M({value: 2.8});
                        break;
                    case this.engine.version.is("2.4"):
                        this.browser.version = new M({value: 10.3});
                        break;
                    case this.engine.version.is("2.3"):
                        this.browser.version = new M({value: 10});
                        break;
                    case this.engine.version.is("2.2"):
                        this.browser.version = new M({value: 9.7});
                        break;
                    case this.engine.version.is("2.1"):
                        this.browser.version = new M({value: 9.6});
                        break;
                    default:
                        this.browser.version = null
                }
                this.os.name = null;
                this.os.version = null
            }
            if (this.options.detectCamouflage) {
                if (match = /Mac OS X 10_6_3; ([^;]+); [a-z]{2}-(?:[a-z]{2})?\)/.exec(g)) {
                    this.browser.name = "";
                    this.browser.version = null;
                    this.browser.mode = "desktop";
                    this.os.name = "Android";
                    this.os.version = null;
                    this.engine.name = "Webkit";
                    this.engine.version = null;
                    this.device.model = match[1];
                    this.device.type = "mobile";
                    var b = L(this.device.model);
                    if (typeof I[b] !== "undefined") {
                        this.device.manufacturer = I[b][0];
                        this.device.model = I[b][1];
                        if (typeof I[b][2] !== "undefined") {
                            this.device.type = I[b][2]
                        }
                        this.device.identified = true
                    }
                    this.features.push("foundDevice")
                }
                if (match = /Linux Ventana; [a-z]{2}-[a-z]{2}; (.+) Build/.exec(g)) {
                    this.browser.name = "";
                    this.browser.version = null;
                    this.browser.mode = "desktop";
                    this.os.name = "Android";
                    this.os.version = null;
                    this.engine.name = "Webkit";
                    this.engine.version = null;
                    this.device.model = match[1];
                    this.device.type = "mobile";
                    var b = L(this.device.model);
                    if (typeof I[b] !== "undefined") {
                        this.device.manufacturer = I[b][0];
                        this.device.model = I[b][1];
                        if (typeof I[b][2] !== "undefined") {
                            this.device.type = I[b][2]
                        }
                        this.device.identified = true
                    }
                    this.features.push("foundDevice")
                }
                if (this.browser.name === "Safari") {
                    if (this.os.name !== "iOS" && /AppleWebKit\/([0-9]+.[0-9]+)/i.exec(g)[1] !== /Safari\/([0-9]+.[0-9]+)/i.exec(g)[1]) {
                        this.features.push("safariMismatch");
                        this.camouflage = true
                    }
                    if (this.os.name === "iOS" && !g.match(/^Mozilla/)) {
                        this.features.push("noMozillaPrefix");
                        this.camouflage = true
                    }
                    if (!/Version\/[0-9\.]+/.exec(g)) {
                        this.features.push("noVersion");
                        this.camouflage = true
                    }
                }
                if (this.browser.name === "Chrome") {
                    if (!/(?:Chrome|CrMo|CriOS)\/([0-9]{1,2}\.[0-9]\.[0-9]{3,4}\.[0-9]+)/.exec(g)) {
                        this.features.push("wrongVersion");
                        this.camouflage = true
                    }
                }
                if (this.options.useFeatures) {
                    if (window.ActiveXObject) {
                        this.features.push("trident");
                        if (typeof this.engine.name !== "undefined" && this.engine.name !== "Trident") {
                            this.camouflage = typeof this.browser.name === "undefined" || this.browser.name !== "Maxthon"
                        }
                    }
                    if (window.opera) {
                        this.features.push("presto");
                        if (typeof this.engine.name !== "undefined" && this.engine.name !== "Presto") {
                            this.camouflage = true
                        }
                        if (this.browser.name === "Internet Explorer") {
                            this.camouflage = true
                        }
                    }
                    if ("getBoxObjectFor" in document || "mozInnerScreenX" in window) {
                        this.features.push("gecko");
                        if (typeof this.engine.name !== "undefined" && this.engine.name !== "Gecko") {
                            this.camouflage = true
                        }
                        if (this.browser.name === "Internet Explorer") {
                            this.camouflage = true
                        }
                    }
                    if ("WebKitCSSMatrix" in window || "WebKitPoint" in window || "webkitStorageInfo" in window || "webkitURL" in window) {
                        this.features.push("webkit");
                        if (typeof this.engine.name !== "undefined" && this.engine.name !== "Webkit") {
                            this.camouflage = true
                        }
                        if (this.browser.name === "Internet Explorer") {
                            this.camouflage = true
                        }
                    }
                    if (this.engine.name === "Webkit" && ({}.toString).toString().indexOf("\n") === -1) {
                        this.features.push("v8");
                        if (this.browser !== null && this.browser.name === "Safari") {
                            this.camouflage = true
                        }
                    }
                    if (this.device.model === "iPad") {
                        if ((screen.width !== 0 && screen.height !== 0) && (screen.width !== 768 && screen.height !== 1024) && (screen.width !== 1024 && screen.height !== 768)) {
                            this.features.push("sizeMismatch");
                            this.camouflage = true
                        }
                    }
                    if (this.device.model === "iPhone" || this.device.model === "iPod") {
                        if ((screen.width !== 0 && screen.height !== 0) && (screen.width !== 320 && screen.height !== 480) && (screen.width !== 480 && screen.height !== 320)) {
                            this.features.push("sizeMismatch");
                            this.camouflage = true
                        }
                    }
                    if (this.os.name === "iOS" && this.os.version) {
                        if (this.os.version.isOlder("4.0") && "sandbox" in document.createElement("iframe")) {
                            this.features.push("foundSandbox");
                            this.camouflage = true
                        }
                        if (this.os.version.isOlder("4.2") && "WebSocket" in window) {
                            this.features.push("foundSockets");
                            this.camouflage = true
                        }
                        if (this.os.version.isOlder("5.0") && !!window.Worker) {
                            this.features.push("foundWorker");
                            this.camouflage = true
                        }
                        if (this.os.version.isNewer("2.1") && !window.applicationCache) {
                            this.features.push("noAppCache");
                            this.camouflage = true
                        }
                    }
                    if (this.os.name !== "iOS" && this.browser.name === "Safari" && this.browser.version) {
                        if (this.browser.version.isOlder("4.0") && !!window.applicationCache) {
                            this.features.push("foundAppCache");
                            this.camouflage = true
                        }
                        if (this.browser.version.isOlder("4.1") && !!(window.history && history.pushState)) {
                            this.features.push("foundHistory");
                            this.camouflage = true
                        }
                        if (this.browser.version.isOlder("5.1") && !!document.documentElement.webkitRequestFullScreen) {
                            this.features.push("foundFullscreen");
                            this.camouflage = true
                        }
                        if (this.browser.version.isOlder("5.2") && "FileReader" in window) {
                            this.features.push("foundFileReader");
                            this.camouflage = true
                        }
                    }
                }
            }
        }
    };

    function L(a) {
        a = typeof a === "undefined" ? "" : a;
        a = a.replace(/_TD$/, "");
        a = a.replace(/_CMCC$/, "");
        a = a.replace(/_/g, " ");
        a = a.replace(/^\s+|\s+$/g, "");
        a = a.replace(/\/[^/]+$/, "");
        a = a.replace(/\/[^/]+ Android\/.*/, "");
        a = a.replace(/^tita on /, "");
        a = a.replace(/^Android on /, "");
        a = a.replace(/^Android for /, "");
        a = a.replace(/^ICS AOSP on /, "");
        a = a.replace(/^Full AOSP on /, "");
        a = a.replace(/^Full Android on /, "");
        a = a.replace(/^Full Cappuccino on /, "");
        a = a.replace(/^Full MIPS Android on /, "");
        a = a.replace(/^Full Android/, "");
        a = a.replace(/^Acer ?/i, "");
        a = a.replace(/^Iconia /, "");
        a = a.replace(/^Ainol /, "");
        a = a.replace(/^Coolpad ?/i, "Coolpad ");
        a = a.replace(/^ALCATEL /, "");
        a = a.replace(/^Alcatel OT-(.*)/, "one touch $1");
        a = a.replace(/^YL-/, "");
        a = a.replace(/^Novo7 ?/i, "Novo7 ");
        a = a.replace(/^GIONEE /, "");
        a = a.replace(/^HW-/, "");
        a = a.replace(/^Huawei[ -]/i, "Huawei ");
        a = a.replace(/^SAMSUNG[ -]/i, "");
        a = a.replace(/^SonyEricsson/, "");
        a = a.replace(/^Lenovo Lenovo/, "Lenovo");
        a = a.replace(/^LNV-Lenovo/, "Lenovo");
        a = a.replace(/^Lenovo-/, "Lenovo ");
        a = a.replace(/^(LG)[ _\/]/, "$1-");
        a = a.replace(/^(HTC.*)\s(?:v|V)?[0-9.]+$/, "$1");
        a = a.replace(/^(HTC)[-\/]/, "$1 ");
        a = a.replace(/^(HTC)([A-Z][0-9][0-9][0-9])/, "$1 $2");
        a = a.replace(/^(Motorola[\s|-])/, "");
        a = a.replace(/^(Moto|MOT-)/, "");
        a = a.replace(/-?(orange(-ls)?|vodafone|bouygues)$/i, "");
        a = a.replace(/http:\/\/.+$/i, "");
        a = a.replace(/^\s+|\s+$/g, "");
        return a
    }

    function S(a) {
        a = a.toString();
        var b = a.split(".");
        var c = b.shift();
        return parseFloat(c + "." + b.join(""))
    }

    return E
})();
var tracker_ua_device = function (h) {
    var n = tracker_ua_base;
    var j = new n(h);
    var i;
    var k;
    if (j.device.type === "mobile" || j.device.type === "tablet") {
        if (i = h.match(/(ZTE|Samsung|Motorola|HTC|Coolpad|Huawei|Lenovo|LG|Sony Ericsson|Oppo|TCL|Vivo|Sony|Meizu|Nokia)/i)) {
            j.device.manufacturer = i[1];
            if (j.device.model && j.device.model.indexOf(i[1]) >= 0) {
                j.device.model = j.device.model.replace(i[1], "")
            }
        }
        if (i = h.match(/(iPod|iPad|iPhone)/i)) {
            j.device.manufacturer = "Apple";
            j.device.model = i[1]
        } else {
            if (i = h.match(/[-\s](Galaxy[\s-_]nexus|Galaxy[\s-_]\w*[\s-_]\w*|Galaxy[\s-_]\w*|SM-\w*|GT-\w*|s[cgp]h-\w*|shw-\w*|ATIV|i9070|omnia|s7568|A3000|A3009|A5000|A5009|A7000|A7009|A8000|C101|C1116|C1158|E400|E500F|E7000|E7009|G3139D|G3502|G3502i|G3508|G3508J|G3508i|G3509|G3509i|G3558|G3559|G3568V|G3586V|G3589W|G3606|G3608|G3609|G3812|G388F|G5108|G5108Q|G5109|G5306W|G5308W|G5309W|G550|G600|G7106|G7108|G7108V|G7109|G7200|G720NO|G7508Q|G7509|G8508S|G8509V|G9006V|G9006W|G9008V|G9008W|G9009D|G9009W|G9198|G9200|G9208|G9209|G9250|G9280|I535|I679|I739|I8190N|I8262|I879|I879E|I889|I9000|I9060|I9082|I9082C|I9082i|I9100|I9100G|I9108|I9128|I9128E|I9128i|I9152|I9152P|I9158|I9158P|I9158V|I9168|I9168i|I9190|I9192|I9195|I9195I|I9200|I9208|I9220|I9228|I9260|I9268|I9300|I9300i|I9305|I9308|I9308i|I939|I939D|I939i|I9500|I9502|I9505|I9507V|I9508|I9508V|I959|J100|J110|J5008|J7008|N7100|N7102|N7105|N7108|N7108D|N719|N750|N7505|N7506V|N7508V|N7509V|N900|N9002|N9005|N9006|N9008|N9008S|N9008V|N9009|N9100|N9106W|N9108V|N9109W|N9150|N916|N9200|P709|P709E|P729|S6358|S7278|S7278U|S7562C|S7562i|S7898i|b9388)[\s\)]/i)) {
                j.device.manufacturer = "Samsung";
                j.device.model = i[1].replace(/Galaxy S VI/i, "Galaxy S6").replace(/Galaxy S V/i, "Galaxy S5").replace(/Galaxy S IV/i, "Galaxy S4").replace(/Galaxy s III/i, "Galaxy S3").replace(/Galaxy S II/i, "Galaxy S2").replace(/Galaxy S I/i, "Galaxy S1").replace(/([a-z]+[0-9]{3})[0-9]?[a-z]*/i, "$1")
            } else {
                if (j.device.manufacturer && j.device.manufacturer.toLowerCase() === "samsung" && j.device.model) {
                    j.device.model = j.device.model.replace(/Galaxy S VI/i, "Galaxy S6").replace(/Galaxy S V/i, "Galaxy S5").replace(/Galaxy S IV/i, "Galaxy S4").replace(/Galaxy s III/i, "Galaxy S3").replace(/Galaxy S II/i, "Galaxy S2").replace(/Galaxy S I/i, "Galaxy S1").replace(/([a-z]+[0-9]{3})[0-9]?[a-z]*/i, "$1")
                } else {
                    if (i = h.match(/(Huawei[\s-_](\w*[-_]?\w*)|\s(7D-\w*|ALE-\w*|ATH-\w*|CHE-\w*|CHM-\w*|Che1-\w*|Che2-\w*|D2-\w*|G616-\w*|G620S-\w*|G621-\w*|G660-\w*|G750-\w*|GRA-\w*|Hol-\w*|MT2-\w*|MT7-\w*|PE-\w*|PLK-\w*|SC-\w*|SCL-\w*|H60-\w*|H30-\w*)[\s\)])/i)) {
                        j.device.manufacturer = "Huawei";
                        if (i[2]) {
                            j.device.model = i[2]
                        } else {
                            if (i[3]) {
                                j.device.model = i[3]
                            }
                        }
                        if (i = j.device.model.match(/(\w*)[\s-_]+[a-z0-9]+/i)) {
                            j.device.model = i[1]
                        }
                    } else {
                        if (i = h.match(/;\s(mi|m1|m2|m3|m4|hm)(\s*\w*)[\s\)]/i)) {
                            if (k = h.match(/(meitu|MediaPad)/i)) {
                                j.device.manufacturer = k[1];
                                j.device.model = ""
                            } else {
                                if (i[2].length > 0 && !((/\s/).test(i[2]))) {
                                    if (k = i[2].match(/(\d)/i)) {
                                        j.device.model = i[1] + "-" + k[1]
                                    }
                                } else {
                                    j.device.manufacturer = "Xiaomi";
                                    if (i[2] && i[2].length > 0) {
                                        i[2] = i[2].replace(/\s/, "");
                                        j.device.model = (i[1].substr(i[1].length - 2) + "-" + i[2]).replace(/m(\d)-/i, "MI-$1")
                                    } else {
                                        j.device.model = (i[1].substr(i[1].length - 2)).replace(/m(\d)/i, "MI-$1")
                                    }
                                    if (/(mi|hm)(-\d)/i.test(j.device.model)) {
                                        if (i = j.device.model.match(/(mi|hm)(-\ds)/i)) {
                                            j.device.model = i[1] + i[2]
                                        } else {
                                            if (i = j.device.model.match(/(mi|hm)(-\d{2})/i)) {
                                                j.device.model = i[1]
                                            } else {
                                                if (i = j.device.model.match(/(mi|hm)(-\d)[A-Z]/i)) {
                                                    j.device.model = i[1] + i[2]
                                                }
                                            }
                                        }
                                    }
                                    if (i = j.device.model.match(/(mi|hm)(-\dg)/i)) {
                                        j.device.model = i[1]
                                    }
                                }
                            }
                        } else {
                            if (/build\/HM\d{0,7}\)/i.test(h)) {
                                j.device.manufacturer = "Xiaomi";
                                j.device.model = "HM"
                            } else {
                                if (i = h.match(/redmi\s?(\d+)?/i)) {
                                    j.device.manufacturer = "Xiaomi";
                                    j.device.model = "HM-" + i[1]
                                } else {
                                    if (j.device.manufacturer && j.device.manufacturer.toLowerCase() === "xiaomi" && j.device.model) {
                                        if (i = j.device.model.match(/mi-one/i)) {
                                            j.device.model = "MI-1"
                                        } else {
                                            if (i = j.device.model.match(/mi-two/i)) {
                                                j.device.model = "MI-2"
                                            } else {
                                                if (i = j.device.model.match(/\d{6}/i)) {
                                                    j.device.model = ""
                                                } else {
                                                    if (i = j.device.model.match(/redmi/i)) {
                                                        j.device.model = j.device.model.toUpperCase().replace(/redmi/i, "HM")
                                                    } else {
                                                        if (i = j.device.model.match(/(m\d)[\s-_](s?)/i)) {
                                                            j.device.model = i[1].replace(/m/, "MI-") + i[2]
                                                        } else {
                                                            if (i = j.device.model.match(/(hm|mi)[\s-_](\d?)[a-rt-z]/i)) {
                                                                if (k = j.device.model.match(/(mi|hm)[\s-_](note|pad)(\d?s?)/i)) {
                                                                    j.device.model = k[1] + "-" + k[2] + k[3]
                                                                } else {
                                                                    j.device.model = i[2] ? i[1] + "-" + i[2] : i[1]
                                                                }
                                                            } else {
                                                                if (i = j.device.model.match(/hm/i)) {
                                                                    if (i = j.device.model.match(/(hm)[\s-_](\d{2})/i)) {
                                                                        j.device.model = "HM"
                                                                    } else {
                                                                        if (i = j.device.model.match(/(hm)[\s-_](\ds)/i)) {
                                                                            j.device.model = "HM-" + i[2]
                                                                        } else {
                                                                            if (i = j.device.model.match(/(hm)[\s-_](\d)[a-z]/i)) {
                                                                                j.device.model = "HM-" + i[2]
                                                                            } else {
                                                                                j.device.model = "HM"
                                                                            }
                                                                        }
                                                                    }
                                                                    if (/hm-\dg/.test(j.device.model)) {
                                                                        j.device.model = "HM"
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    } else {
                                        if (i = h.match(/(vivo[\s-_](\w*)|\s(E1\w?|E3\w?|E5\w?|V1\w?|V2\w?|S11\w?|S12\w?|S1\w?|S3\w?|S6\w?|S7\w?|S9\w?|X1\w?|X3\w?|X520\w?|X5\w?|X5Max|X5Max+|X5Pro|X5SL|X710F|X710L|Xplay|Xshot|Xpaly3S|Y11\w?|Y11i\w?|Y11i\w?|Y13\w?|Y15\w?|Y17\w?|Y18\w?|Y19\w?|Y1\w?|Y20\w?|Y22\w?|Y22i\w?|Y23\w?|Y27\w?|Y28\w?|Y29\w?|Y33\w?|Y37\w?|Y3\w?|Y613\w?|Y622\w?|Y627\w?|Y913\w?|Y923\w?|Y927\w?|Y928\w?|Y929\w?|Y937\w?)[\s\)])/i)) {
                                            j.device.manufacturer = "Vivo";
                                            j.device.model = i[1];
                                            j.device.model = j.device.model.replace(/(viv[\s-_]|vivo[\s-_]|bbg[\s-_])/i, "");
                                            if (i = j.device.model.match(/([a-z]+[0-9]+)i?[a-z]?[\s-_]?/i)) {
                                                j.device.model = i[1]
                                            }
                                        } else {
                                            if (i = h.match(/(Oppo[\s-_](\w*)|\s(1100|1105|1107|3000|3005|3007|6607|A100|A103|A105|A105K|A109|A109K|A11|A113|A115|A115K|A121|A125|A127|A129|A201|A203|A209|A31|A31c|A31t|A31u|A51kc|A520|A613|A615|A617|E21W|Find|Mirror|N5110|N5117|N5207|N5209|R2010|R2017|R6007|R7005|R7007|R7c|R7t|R8000|R8007|R801|R805|R807|R809T|R8107|R8109|R811|R811W|R813T|R815T|R815W|R817|R819T|R8200|R8205|R8207|R821T|R823T|R827T|R830|R830S|R831S|R831T|R833T|R850|Real|T703|U2S|U521|U525|U529|U539|U701|U701T|U705T|U705W|X9000|X9007|X903|X905|X9070|X9077|X909|Z101|R829T)[\s\)])/i)) {
                                                j.device.manufacturer = "Oppo";
                                                if (i[2]) {
                                                    j.device.model = i[2]
                                                } else {
                                                    if (i[3]) {
                                                        j.device.model = i[3]
                                                    }
                                                }
                                                if (i = j.device.model.match(/([a-z]+[0-9]+)-?(plus)/i)) {
                                                    j.device.model = i[1] + "-" + i[2]
                                                } else {
                                                    if (i = j.device.model.match(/(\w*-?[a-z]+[0-9]+)/i)) {
                                                        j.device.model = i[1]
                                                    }
                                                }
                                            } else {
                                                if (j.device.manufacturer && j.device.manufacturer.toLowerCase() === "oppo" && j.device.model) {
                                                    if (i = j.device.model.match(/([a-z]+[0-9]+)-?(plus)/i)) {
                                                        j.device.model = i[1] + "-" + i[2]
                                                    } else {
                                                        if (i = j.device.model.match(/(\w*-?[a-z]+[0-9]+)/i)) {
                                                            j.device.model = i[1]
                                                        }
                                                    }
                                                } else {
                                                    if (i = h.match(/(Lenovo[\s-_](\w*[-_]?\w*)|\s(A3580|A3860|A5500|A5600|A5860|A7600|A806|A800|A808T|A808T-I|A936|A938t|A788t|K30-E|K30-T|K30-W|K50-T3s|K50-T5|K80M|K910|K910e|K920|S90-e|S90-t|S90-u|S968T|X2-CU|X2-TO|Z90-3|Z90-7)[\s\)])/i)) {
                                                        j.device.manufacturer = "Lenovo";
                                                        if (i[2]) {
                                                            j.device.model = i[2]
                                                        } else {
                                                            if (i[3]) {
                                                                j.device.model = i[3]
                                                            }
                                                        }
                                                        if (i = j.device.model.match(/([a-z]+[0-9]+)/i)) {
                                                            j.device.model = i[1]
                                                        }
                                                    } else {
                                                        if (i = h.match(/(Coolpad[\s-_](\w*)|\s(7295C|7298A|7620L|8908|8085|8970L|9190L|Y80D)[\s\)])/i)) {
                                                            j.device.manufacturer = "Coolpad";
                                                            if (i[2]) {
                                                                j.device.model = i[2]
                                                            } else {
                                                                if (i[3]) {
                                                                    j.device.model = i[3]
                                                                }
                                                            }
                                                            if (i = j.device.model.match(/([a-z]?[0-9]+)/i)) {
                                                                j.device.model = i[1]
                                                            }
                                                        } else {
                                                            if (j.device.manufacturer && j.device.manufacturer.toLowerCase() === "coolpad" && j.device.model) {
                                                                if (i = j.device.model.match(/([a-z]?[0-9]+)/i)) {
                                                                    j.device.model = i[1]
                                                                }
                                                            } else {
                                                                if (i = h.match(/\s(mx\d*\w*|mz-(\w*))\s(\w*)\s*\w*\s*build/i)) {
                                                                    j.device.manufacturer = "Meizu";
                                                                    var l = i[2] ? i[2] : i[1];
                                                                    if (i[3]) {
                                                                        j.device.model = l + "-" + i[3]
                                                                    } else {
                                                                        j.device.model = l + ""
                                                                    }
                                                                } else {
                                                                    if (i = h.match(/M463C|M35\d/i)) {
                                                                        j.device.manufacturer = "Meizu";
                                                                        j.device.model = i[1]
                                                                    } else {
                                                                        if (i = h.match(/(Htc[-_\s](\w*)|\s(601e|606w|608t|609d|610t|6160|619d|620G|626d|626s|626t|626w|709d|801e|802d|802t|802w|809D|816d|816e|816t|816v|816w|826d|826s|826t|826w|828w|901e|919d|A310e|A50AML|A510e|A620d|A620e|A620t|A810e|A9191|Aero|C620d|C620e|C620t|D316d|D516d|D516t|D516w|D820mt|D820mu|D820t|D820ts|D820u|D820us|E9pt|E9pw|E9sw|E9t|HD7S|M8Et|M8Sd|M8St|M8Sw|M8d|M8e|M8s|M8si|M8t|M8w|M9W|M9ew|Phablet|S510b|S510e|S610d|S710d|S710e|S720e|S720t|T327t|T328d|T328t|T328w|T329d|T329t|T329w|T528d|T528t|T528w|T8698|WF5w|X315e|X710e|X715e|X720d|X920e|Z560e|Z710e|Z710t|Z715e)[\s\)])/)) {
                                                                            j.device.manufacturer = "Htc";
                                                                            j.device.model = i[1]
                                                                        } else {
                                                                            if (i = h.match(/(Gionee[\s-_](\w*)|\s(GN\d+\w*)[\s\)])/i)) {
                                                                                j.device.manufacturer = "Gionee";
                                                                                if (i[2]) {
                                                                                    j.device.model = i[2]
                                                                                } else {
                                                                                    if (i[3]) {
                                                                                        j.device.model = i[3]
                                                                                    }
                                                                                }
                                                                            } else {
                                                                                if (i = h.match(/(LG[-_](\w*)|\s(D728|D729|D802|D855|D856|D857|D858|D859|E985T|F100L|F460|H778|H818|H819|P895|VW820)[\s\)])/i)) {
                                                                                    j.device.manufacturer = "Lg";
                                                                                    if (i[2]) {
                                                                                        j.device.model = i[2]
                                                                                    } else {
                                                                                        if (i[3]) {
                                                                                            j.device.model = i[3]
                                                                                        }
                                                                                    }
                                                                                } else {
                                                                                    if (i = h.match(/(Tcl[\s-_](\w*)|\s(H916T|P588L|P618L|P620M|P728M)[\s\)])/)) {
                                                                                        j.device.manufacturer = "Tcl";
                                                                                        j.device.model = i[1]
                                                                                    } else {
                                                                                        if (i = h.match(/(V9180|N918)/i)) {
                                                                                            j.device.manufacturer = "Zte";
                                                                                            j.device.model = i[1]
                                                                                        } else {
                                                                                            if (j.device.manufacturer && j.device.manufacturer.toLowerCase() === "zte" && j.device.model) {
                                                                                                if (i = j.device.model.match(/([a-z]?[0-9]+)/i)) {
                                                                                                    j.device.model = i[1]
                                                                                                }
                                                                                            } else {
                                                                                                if (i = h.match(/(UIMI\w*|umi\w*)[\s-_](\w*)\s*\w*\s*build/i)) {
                                                                                                    j.device.manufacturer = "Uimi";
                                                                                                    if (i[2]) {
                                                                                                        j.device.model = i[1] + "-" + i[2]
                                                                                                    } else {
                                                                                                        j.device.model = i[1] + ""
                                                                                                    }
                                                                                                } else {
                                                                                                    if (i = h.match(/eton[\s-_](\w*)/i)) {
                                                                                                        j.device.manufacturer = "Eton";
                                                                                                        j.device.model = i[1]
                                                                                                    } else {
                                                                                                        if (i = h.match(/(SM705|SM701|YQ601|YQ603)/i)) {
                                                                                                            j.device.manufacturer = "Smartisan";
                                                                                                            j.device.model = ({
                                                                                                                SM705: "T1",
                                                                                                                SM701: "T1",
                                                                                                                YQ601: "U1",
                                                                                                                YQ603: "U1"
                                                                                                            })[i[1]] || i[1]
                                                                                                        } else {
                                                                                                            if (i = h.match(/(Asus[\s-_](\w*)|\s(A500CG|A500KL|A501CG|A600CG|PF400CG|PF500KL|T001|X002|X003|ZC500TG|ZE550ML|ZE551ML)[\s\)])/i)) {
                                                                                                                j.device.manufacturer = "Asus";
                                                                                                                if (i[2]) {
                                                                                                                    j.device.model = i[2]
                                                                                                                } else {
                                                                                                                    if (i[3]) {
                                                                                                                        j.device.model = i[3]
                                                                                                                    }
                                                                                                                }
                                                                                                            } else {
                                                                                                                if (i = h.match(/(Nubia[-_\s](\w*)|(NX501|NX505J|NX506J|NX507J|NX503A|nx\d+\w*)[\s\)])/i)) {
                                                                                                                    j.device.manufacturer = "Nubia";
                                                                                                                    if (i[2]) {
                                                                                                                        j.device.model = i[2]
                                                                                                                    } else {
                                                                                                                        if (i[3]) {
                                                                                                                            j.device.model = i[3]
                                                                                                                        }
                                                                                                                    }
                                                                                                                } else {
                                                                                                                    if (i = h.match(/(HT-\w*)|Haier[\s-_](\w*-?\w*)/i)) {
                                                                                                                        j.device.manufacturer = "Haier";
                                                                                                                        if (i[1]) {
                                                                                                                            j.device.model = i[1]
                                                                                                                        } else {
                                                                                                                            if (i[2]) {
                                                                                                                                j.device.model = i[2]
                                                                                                                            }
                                                                                                                        }
                                                                                                                    } else {
                                                                                                                        if (i = h.match(/K-Touch[\s-_](tou\s?ch\s?(\d)|\w*)/i)) {
                                                                                                                            j.device.manufacturer = "K-Touch";
                                                                                                                            if (i[2]) {
                                                                                                                                j.device.model = "Ktouch" + i[2]
                                                                                                                            } else {
                                                                                                                                j.device.model = i[1]
                                                                                                                            }
                                                                                                                        } else {
                                                                                                                            if (i = h.match(/Doov[\s-_](\w*)/i)) {
                                                                                                                                j.device.manufacturer = "Doov";
                                                                                                                                j.device.model = i[1]
                                                                                                                            } else {
                                                                                                                                if (/koobee/i.test(h)) {
                                                                                                                                    j.device.manufacturer = "koobee"
                                                                                                                                } else {
                                                                                                                                    if (/C69/i.test(h)) {
                                                                                                                                        j.device.manufacturer = "Sony"
                                                                                                                                    } else {
                                                                                                                                        if (/N787|N818S/i.test(h)) {
                                                                                                                                            j.device.manufacturer = "Haojixing"
                                                                                                                                        } else {
                                                                                                                                            if (i = h.match(/(hs-|Hisense[\s-_])(\w*)/i)) {
                                                                                                                                                j.device.manufacturer = "Hisense";
                                                                                                                                                j.device.model = i[2]
                                                                                                                                            }
                                                                                                                                        }
                                                                                                                                    }
                                                                                                                                }
                                                                                                                            }
                                                                                                                        }
                                                                                                                    }
                                                                                                                }
                                                                                                            }
                                                                                                        }
                                                                                                    }
                                                                                                }
                                                                                            }
                                                                                        }
                                                                                    }
                                                                                }
                                                                            }
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        if (j.device.manufacturer) {
            j.device.manufacturer = j.device.manufacturer.substr(0, 1).toUpperCase() + j.device.manufacturer.substr(1).toLowerCase()
        }
        if (j.device.model) {
            j.device.model = j.device.model.toUpperCase().replace(/-+|_+|\s+/g, " ");
            j.device.model = j.device.model.match(/\s*(\w*\s*\w*)/)[1].replace(/\s+/, "-");
            if (j.device.manufacturer === "Samsung") {
                j.device.model = ({
                    "SCH-I95": "GT-I950",
                    "SCH-I93": "GT-I930",
                    "SCH-I86": "GT-I855",
                    "SCH-N71": "GT-N710",
                    "SCH-I73": "GT-S789",
                    "SCH-P70": "GT-I915"
                })[j.device.model] || j.device.model
            } else {
                if (j.device.manufacturer === "Huawei") {
                    j.device.model = ({
                        CHE1: "CHE",
                        CHE2: "CHE",
                        G620S: "G621",
                        C8817D: "G621"
                    })[j.device.model] || j.device.model
                }
            }
        }
        if (j.device.manufacturer && j.device.manufacturer === "Xiaomi") {
            if (i = j.device.model.match(/(hm|mi)-(note)/i)) {
                j.device.model = i[1] + "-" + i[2]
            } else {
                if (i = j.device.model.match(/(hm|mi)-(\ds?)/i)) {
                    j.device.model = i[1] + "-" + i[2]
                } else {
                    if (i = j.device.model.match(/(hm|mi)-(\d)[a-rt-z]/i)) {
                        j.device.model = i[1] + "-" + i[2]
                    }
                }
            }
        }
    }
    if (j.device.type === "desktop") {
        if (i = /360se(?:[ \/]([\w.]+))?/i.exec(h)) {
            j.browser.name = "360 security Explorer";
            j.browser.version = {original: i[1]}
        } else {
            if (i = /the world(?:[ \/]([\w.]+))?/i.exec(h)) {
                j.browser.name = "the world";
                j.browser.version = {original: i[1]}
            } else {
                if (i = /tencenttraveler ([\w.]+)/i.exec(h)) {
                    j.browser.name = "tencenttraveler";
                    j.browser.version = {original: i[1]}
                } else {
                    if (i = /LBBROWSER/i.exec(h)) {
                        j.browser.name = "LBBROWSER"
                    }
                }
            }
        }
    } else {
        if (j.device.type === "mobile" || j.device.type === "tablet") {
            if (i = /BaiduHD\s+([\w.]+)/i.exec(h)) {
                j.browser.name = "BaiduHD";
                j.browser.version = {original: i[1]}
            } else {
                if (i = /360.s*aphone\s*browser\s*\(version\s*([\w.]+)\)/i.exec(h)) {
                    j.browser.name = "360 Browser";
                    j.browser.version = {original: i[1]}
                } else {
                    if (i = /flyflow\/([\w.]+)/i.exec(h)) {
                        j.browser.name = "Baidu Browser";
                        j.browser.version = {original: i[1]}
                    } else {
                        if (i = /baiduhd ([\w.]+)/i.exec(h)) {
                            j.browser.name = "Baidu HD";
                            j.browser.version = {original: i[1]}
                        } else {
                            if (i = /baidubrowser\/([\d\.]+)\s/i.exec(h)) {
                                j.browser.name = "baidubrowser";
                                j.browser.version = {original: i[1]}
                            } else {
                                if (i = /LieBaoFast\/([\w.]+)/i.exec(h)) {
                                    j.browser.name = "LieBao Fast";
                                    j.browser.version = {original: i[1]}
                                } else {
                                    if (i = /LieBao\/([\w.]+)/i.exec(h)) {
                                        j.browser.name = "LieBao";
                                        j.browser.version = {original: i[1]}
                                    } else {
                                        if (i = /Sogou\w+\/([0-9\.]+)/i.exec(h)) {
                                            j.browser.name = "SogouMobileBrowser";
                                            j.browser.version = {original: i[1]}
                                        } else {
                                            if (i = /bdbrowser\w+\/([0-9\.]+)/i.exec(h)) {
                                                j.browser.name = "百度国际";
                                                j.browser.version = {original: i[1]}
                                            } else {
                                                if (j.os.name === "Android" && /safari/i.test(h) && (i = /chrome\/([0-9\.]+)/i.exec(h))) {
                                                    if (k = h.match(/\s+(\w+Browser)\/?([\d\.]*)/)) {
                                                        j.browser.name = k[1];
                                                        if (k[2]) {
                                                            j.browser.version = {original: k[2]}
                                                        } else {
                                                            j.browser.version = {original: i[1]}
                                                        }
                                                    } else {
                                                        j.browser.name = "Android Chrome";
                                                        j.browser.version = {original: i[1]}
                                                    }
                                                } else {
                                                    if (j.os.name === "Android" && /safari/i.test(h) && (i = /version\/([0-9\.]+)/i.exec(h))) {
                                                        if (k = h.match(/\s+(\w+Browser)\/?([\d\.]*)/)) {
                                                            j.browser.name = k[1];
                                                            if (k[2]) {
                                                                j.browser.version = {original: k[2]}
                                                            } else {
                                                                j.browser.version = {original: i[1]}
                                                            }
                                                        } else {
                                                            j.browser.name = "Android Browser";
                                                            j.browser.version = {original: i[1]}
                                                        }
                                                    } else {
                                                        if (/(ipad|iphone).* applewebkit\/.* mobile/i.test(h)) {
                                                            j.browser.name = "Safari"
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    if (i = h.match(/baiduboxapp\/?([\d\.]*)/i)) {
        j.browser.name = "百度框";
        if (i[1]) {
            j.browser.version = {original: i[1]}
        }
    } else {
        if (/BaiduLightAppRuntime/i.test(h)) {
            j.browser.name = "轻应用runtime"
        } else {
            if (/Weibo/i.test(h)) {
                j.browser.name = "微博"
            } else {
                if (/MQQ/i.test(h)) {
                    j.browser.name = "手机QQ"
                } else {
                    if (/hao123/i.test(h)) {
                        j.browser.name = "hao123"
                    }
                }
            }
        }
    }
    if (i = /MicroMessenger\/([\w.]+)/i.exec(h)) {
        j.browser.name = "微信";
        var m = (i[1]).replace(/_/g, ".");
        k = /(\d+\.\d+\.\d+\.\d+)/.exec(m);
        if (k) {
            m = k[1]
        }
        j.browser.version = {original: m}
    }
    if (i = /UCBrowser\/([\w.]+)/i.exec(h)) {
        j.browser.name = "UC Browser";
        j.browser.version = {original: i[1]}
    }
    if (i = /OPR\/([\w.]+)/i.exec(h)) {
        j.browser.name = "Opera";
        j.browser.version = {original: i[1]}
    } else {
        if (i = /OPiOS\/([\w.]+)/i.exec(h)) {
            j.browser.name = "Opera";
            j.browser.version = {original: i[1]}
        } else {
            if (/Trident\/7/i.test(h) && /rv:11/i.test(h)) {
                j.browser.name = "Internet Explorer";
                j.browser.version = {major: "11", original: "11"}
            } else {
                if (/Edge\/12/i.test(h) && /Windows Phone|Windows NT/i.test(h)) {
                    j.browser.name = "Microsoft Edge";
                    j.browser.version = {major: "12", original: "12"}
                } else {
                    if (i = /miuibrowser\/([\w.]+)/i.exec(h)) {
                        j.browser.name = "miui browser";
                        j.browser.version = {original: i[1]}
                    }
                }
            }
        }
    }
    if (!j.browser.name) {
        if (i = /Safari\/([\w.]+)/i.exec(h) && /Version/i.test(h)) {
            j.browser.name = "Safari"
        }
    }
    if (j.browser.name && !j.browser.version) {
        if (i = /Version\/([\w.]+)/i.exec(h)) {
            j.browser.version = {original: i[1]}
        }
    }
    if (j.os.name === "Windows" || /Windows/i.test(h)) {
        j.os.name = "Windows";
        if (/NT 6.3/i.test(h)) {
            j.os.version = {alias: "8.1", original: "8.1"}
        } else {
            if (/NT 6.4/i.test(h) || /NT 10.0/i.test(h)) {
                j.os.version = {alias: "10", original: "10"}
            }
        }
    } else {
        if (j.os.name === "Mac OS X") {
            j.os.name = "Mac OS X";
            if (i = /Mac OS X[\s\_\-\/](\d+[\.\-\_]\d+[\.\-\_]?\d*)/i.exec(h)) {
                j.os.version = {alias: i[1].replace(/_/g, "."), original: i[1].replace(/_/g, ".")}
            } else {
                j.os.version = {alias: "", original: ""}
            }
        } else {
            if (/Android/i.test(j.os.name)) {
                if (i = h.match(/Android[\s\_\-\/i686]?[\s\_\-\/](\d+[\.\-\_]\d+[\.\-\_]?\d*)/i)) {
                    j.os.version = {alias: i[1], original: i[1]}
                }
            }
        }
    }
    return j
};
/*! { "name": "vissense", "version": "0.10.0", "homepage": "https://vissense.github.io/vissense","copyright": "(c) 2016 tbk" } */
!function (h, l, g) {
    var j = function (a) {
        var b = g(a, a.document);
        return b.noConflict = function () {
            return b
        }, b
    };
    if ("function" == typeof define && define.amd) {
        define([], function () {
            return j
        })
    } else {
        if ("object" == typeof exports) {
            module.exports = function (a) {
                return j(a)
            }
        } else {
            var k = h[l], i = g(h, h.document);
            h[l] = i, h[l].noConflict = function () {
                return h[l] = k, i
            }
        }
    }
}(this, "VisSense", function (Y, K, ad) {
    function af(a, b) {
        return function () {
            var c = arguments;
            return ak(function () {
                a.apply(ad, c)
            }, b || 0)
        }
    }

    function ag(a, c) {
        var b = ah;
        return function () {
            var d = this, e = arguments;
            b(), b = ak(function () {
                a.apply(d, e)
            }, c)
        }
    }

    function U(d, a) {
        var b = W(a), c = W(d);
        return b || c ? b && c ? (X(Object.keys(a), function (e) {
            d[e] === ad && (d[e] = a[e])
        }), d) : b ? a : d : a
    }

    function ak(a, c) {
        var b = setTimeout(function () {
            a()
        }, c || 0);
        return function () {
            clearTimeout(b)
        }
    }

    function aa(b, a) {
        return function () {
            return (ap(b) ? b() : b) ? a() : ad
        }
    }

    function R(c, g, e) {
        for (var d = -1, a = Object.keys(g), h = a.length, f = ap(e); ++d < h;) {
            var b = a[d];
            c[b] = f ? e(c[b], g[b], b, c, g) : g[b]
        }
        return c
    }

    function X(e, f, c) {
        for (var b = 0, a = e.length; a > b; b++) {
            var d = f.call(c, e[b], b, e);
            if (d !== ad) {
                return d
            }
        }
    }

    function M(a) {
        return a
    }

    function an(a) {
        return a !== ad
    }

    function S(a) {
        return a && "object" == typeof a && "number" == typeof a.length && "[object Array]" === Object.prototype.toString.call(a) || !1
    }

    function J(a) {
        return a && 1 === a.nodeType || !1
    }

    function ap(a) {
        return "function" == typeof a || !1
    }

    function W(a) {
        var b = typeof a;
        return "function" === b || a && "object" === b || !1
    }

    function ah() {
    }

    function al() {
        return new Date().getTime()
    }

    function O(a) {
        var c, b = !1;
        return function () {
            return b || (c = a.apply(ad, arguments), b = !0), c
        }
    }

    function ae(e, a, d) {
        var b = ah, c = !1;
        return function () {
            var f = al(), h = arguments, g = function () {
                c = f, e.apply(d, h)
            };
            c && c + a > f ? (b(), b = ak(g, a)) : (c = f, ak(g, 0))
        }
    }

    function T(a) {
        var b = a || Y;
        return {height: b.innerHeight, width: b.innerWidth}
    }

    function ac(b, a) {
        return (a || Y).getComputedStyle(b, null)
    }

    function L(b, a) {
        return b.getPropertyValue(a)
    }

    function Q(d, b) {
        b || (b = ac(d));
        var a = L(b, "display");
        if ("none" === a) {
            return !1
        }
        var c = d.parentNode;
        return J(c) ? Q(c) : !0
    }

    function ao(c, a) {
        if (c === (a || Y).document) {
            return !0
        }
        if (!c || !c.parentNode) {
            return !1
        }
        var b = ac(c, a), d = L(b, "visibility");
        return "hidden" === d || "collapse" === d ? !1 : Q(c, b)
    }

    function ai(a, b) {
        return !a || a.width <= 0 || a.height <= 0 ? !1 : a.bottom > 0 && a.right > 0 && a.top < b.height && a.left < b.width
    }

    function N(c, f) {
        var a = c.getBoundingClientRect(), d = T(f);
        if (!ai(a, d) || !ao(c)) {
            return 0
        }
        var e = 0, b = 0;
        return a.top >= 0 ? e = Math.min(a.height, d.height - a.top) : a.bottom > 0 && (e = Math.min(d.height, a.bottom)), a.left >= 0 ? b = Math.min(a.width, d.width - a.left) : a.right > 0 && (b = Math.min(d.width, a.right)), e * b / (a.height * a.width)
    }

    function V(a) {
        return !aj(a || Y).isHidden()
    }

    function P(b, c) {
        if (!(this instanceof P)) {
            return new P(b, c)
        }
        if (!J(b)) {
            throw new Error("not an element node")
        }
        this._element = b, this._config = U(c, {
            fullyvisible: 1,
            hidden: 0,
            referenceWindow: Y,
            percentageHook: N,
            precision: 3,
            visibilityHooks: []
        });
        var a = this._config.precision <= 0 ? 1 : Math.pow(10, this._config.precision || 3);
        this._round = function (e) {
            return Math.round(e * a) / a
        };
        var d = aj(this._config.referenceWindow);
        this._config.visibilityHooks.push(function () {
            return !d.isHidden()
        })
    }

    function ab(c, b) {
        var a = c.state(), d = a.percentage;
        return b && d === b.percentage && b.percentage === b.previous.percentage ? b : a.hidden ? P.VisState.hidden(d, b) : a.fullyvisible ? P.VisState.fullyvisible(d, b) : P.VisState.visible(d, b)
    }

    function Z(d, c) {
        var b = U(c, {strategy: [new Z.Strategy.PollingStrategy(), new Z.Strategy.EventStrategy()], async: !1});
        this._visobj = d, this._state = {}, this._started = !1;
        var a = "*#" + al();
        this._pubsub = new am({
            async: b.async,
            anyTopicName: a
        }), this._events = [a, "start", "stop", "update", "hidden", "visible", "fullyvisible", "percentagechange", "visibilitychange"], this._strategy = new Z.Strategy.CompositeStrategy(b.strategy), this._strategy.init(this), this._pubsub.on("update", function (g) {
            var e = g._state.percentage, f = g._state.previous.percentage;
            e !== f && g._pubsub.publish("percentagechange", [g, e, f])
        }), this._pubsub.on("update", function (e) {
            e._state.code !== e._state.previous.code && e._pubsub.publish("visibilitychange", [e])
        }), this._pubsub.on("visibilitychange", function (e) {
            e._state.visible && !e._state.previous.visible && e._pubsub.publish("visible", [e])
        }), this._pubsub.on("visibilitychange", function (e) {
            e._state.fullyvisible && e._pubsub.publish("fullyvisible", [e])
        }), this._pubsub.on("visibilitychange", function (e) {
            e._state.hidden && e._pubsub.publish("hidden", [e])
        }), X(this._events, function (e) {
            ap(b[e]) && this.on(e, b[e])
        }, this)
    }

    var aj = function (a) {
        return function (d, f) {
            var g = function (h, i) {
                    return {property: h, event: i}
                }, b = "visibilitychange",
                e = [g("webkitHidden", "webkit" + b), g("msHidden", "ms" + b), g("mozHidden", "moz" + b), g("hidden", b)],
                c = X(e, function (h) {
                    return d[h.property] !== f ? {
                        isHidden: function () {
                            return !!d[h.property] || !1
                        }, onVisibilityChange: function (i) {
                            return d.addEventListener(h.event, i, !1), function () {
                                d.removeEventListener(h.event, i, !1)
                            }
                        }
                    } : void 0
                });
            return c || {
                isHidden: function () {
                    return !1
                }, onVisibilityChange: function () {
                    return ah
                }
            }
        }((a || Y).document)
    }, am = function (a) {
        function b(d) {
            this._cache = {}, this._onAnyCache = [], this._config = U(d, {async: !1, anyTopicName: "*"})
        }

        var c = function (e, d) {
            X(e, function (f) {
                f(d)
            })
        };
        return b.prototype.on = function (d, e) {
            if (!ap(e)) {
                return ah
            }
            var f = function (i) {
                return e.apply(a, i || [])
            }, g = this._config.async ? af(f) : f, h = function (j, i, k) {
                return function () {
                    var l = i.indexOf(j);
                    return l > -1 ? (i.splice(l, 1), !0) : !1
                }
            };
            return d === this._config.anyTopicName ? (this._onAnyCache.push(g), h(g, this._onAnyCache, "*")) : (this._cache[d] || (this._cache[d] = []), this._cache[d].push(g), h(g, this._cache[d], d))
        }, b.prototype.publish = function (g, h) {
            var f = (this._cache[g] || []).concat(g === this._config.anyTopicName ? [] : this._onAnyCache),
                d = !!this._config.async, e = d ? af(c) : function (i, j) {
                    return c(i, j), ah
                };
            return e(f, h || [])
        }, b
    }();
    P.prototype.state = function () {
        var a = X(this._config.visibilityHooks, function (b) {
            return b(this._element) ? void 0 : P.VisState.hidden(0)
        }, this);
        return a || function (d, e, c) {
            var b = d._round(c.percentageHook(e, c.referenceWindow));
            return b <= c.hidden ? P.VisState.hidden(b) : b >= c.fullyvisible ? P.VisState.fullyvisible(b) : P.VisState.visible(b)
        }(this, this._element, this._config)
    }, P.prototype.percentage = function () {
        return this.state().percentage
    }, P.prototype.element = function () {
        return this._element
    }, P.prototype.referenceWindow = function () {
        return this._config.referenceWindow
    }, P.prototype.isFullyVisible = function () {
        return this.state().fullyvisible
    }, P.prototype.isVisible = function () {
        return this.state().visible
    }, P.prototype.isHidden = function () {
        return this.state().hidden
    }, P.fn = P.prototype, P.of = function (a, b) {
        return new P(a, b)
    };
    var I = {HIDDEN: [0, "hidden"], VISIBLE: [1, "visible"], FULLY_VISIBLE: [2, "fullyvisible"]};
    return P.VisState = function () {
        function a(b, d, c) {
            return c && delete c.previous, {
                code: b[0],
                state: b[1],
                percentage: d,
                previous: c || {},
                fullyvisible: b[0] === I.FULLY_VISIBLE[0],
                visible: b[0] === I.VISIBLE[0] || b[0] === I.FULLY_VISIBLE[0],
                hidden: b[0] === I.HIDDEN[0]
            }
        }

        return {
            hidden: function (c, b) {
                return a(I.HIDDEN, c, b)
            }, visible: function (c, b) {
                return a(I.VISIBLE, c, b)
            }, fullyvisible: function (c, b) {
                return a(I.FULLY_VISIBLE, c, b)
            }
        }
    }(), Z.prototype.visobj = function () {
        return this._visobj
    }, Z.prototype.publish = function (c, b) {
        var a = this._events.indexOf(c) >= 0;
        if (a) {
            throw new Error('Cannot publish internal event "' + c + '" from external scope.')
        }
        return this._pubsub.publish(c, b)
    }, Z.prototype.state = function () {
        return this._state
    }, Z.prototype.start = function (b) {
        if (this._started) {
            return this
        }
        var a = U(b, {async: !1});
        return this._cancelAsyncStart && this._cancelAsyncStart(), a.async ? this.startAsync() : (this._started = !0, this.update(), this._pubsub.publish("start", [this]), this._strategy.start(this), this)
    }, Z.prototype.startAsync = function (c) {
        this._cancelAsyncStart && this._cancelAsyncStart();
        var b = this, a = ak(function () {
            b.start(R(U(c, {}), {async: !1}))
        });
        return this._cancelAsyncStart = function () {
            a(), b._cancelAsyncStart = null
        }, this
    }, Z.prototype.stop = function () {
        this._cancelAsyncStart && this._cancelAsyncStart(), this._started && (this._strategy.stop(this), this._pubsub.publish("stop", [this])), this._started = !1
    }, Z.prototype.update = function () {
        this._started && (this._state = ab(this._visobj, this._state), this._pubsub.publish("update", [this]))
    }, Z.prototype.on = function (b, a) {
        return this._pubsub.on(b, a)
    }, Z.Builder = function () {
        var a = function (h, e) {
            var f = null, i = h.strategy === !1, g = !i && (h.strategy || e.length > 0);
            if (g) {
                var b = !!h.strategy, c = S(h.strategy), d = b ? c ? h.strategy : [h.strategy] : [];
                f = d.concat(e)
            } else {
                f = i ? [] : h.strategy
            }
            return f
        };
        return function (d) {
            var c = {}, e = [], b = [], g = !1, f = null;
            return {
                set: function (i, h) {
                    return c[i] = h, this
                }, strategy: function (h) {
                    return e.push(h), this
                }, on: function (h, i) {
                    return b.push([h, i]), this
                }, build: function (h) {
                    var i = function () {
                        var k = a(c, e);
                        c.strategy = k;
                        var l = d.monitor(c);
                        return X(b, function (m) {
                            l.on(m[0], m[1])
                        }), g = !0, f = l
                    }, j = g ? f : i();
                    return ap(h) ? h(j) : j
                }
            }
        }
    }(), Z.Strategy = function () {
    }, Z.Strategy.prototype.init = ah, Z.Strategy.prototype.start = ah, Z.Strategy.prototype.stop = ah, Z.Strategy.CompositeStrategy = function (a) {
        this._strategies = S(a) ? a : [a]
    }, Z.Strategy.CompositeStrategy.prototype = Object.create(Z.Strategy.prototype), Z.Strategy.CompositeStrategy.prototype.init = function (a) {
        X(this._strategies, function (b) {
            ap(b.init) && b.init(a)
        })
    }, Z.Strategy.CompositeStrategy.prototype.start = function (a) {
        X(this._strategies, function (b) {
            ap(b.start) && b.start(a)
        })
    }, Z.Strategy.CompositeStrategy.prototype.stop = function (a) {
        X(this._strategies, function (b) {
            ap(b.stop) && b.stop(a)
        })
    }, Z.Strategy.PollingStrategy = function (a) {
        this._config = U(a, {interval: 1000}), this._started = !1
    }, Z.Strategy.PollingStrategy.prototype = Object.create(Z.Strategy.prototype), Z.Strategy.PollingStrategy.prototype.start = function (a) {
        return this._started || (this._clearInterval = function (c) {
            var b = setInterval(function () {
                a.update()
            }, c);
            return function () {
                clearInterval(b)
            }
        }(this._config.interval), this._started = !0), this._started
    }, Z.Strategy.PollingStrategy.prototype.stop = function () {
        return this._started ? (this._clearInterval(), this._started = !1, !0) : !1
    }, Z.Strategy.EventStrategy = function (a) {
        this._config = U(a, {throttle: 50}), this._config.debounce > 0 && (this._config.throttle = +this._config.debounce), this._started = !1
    }, Z.Strategy.EventStrategy.prototype = Object.create(Z.Strategy.prototype), Z.Strategy.EventStrategy.prototype.start = function (a) {
        return this._started || (this._removeEventListeners = function (e) {
            var c = a.visobj().referenceWindow(), d = aj(c), b = d.onVisibilityChange(e);
            return c.addEventListener("scroll", e, !1), c.addEventListener("resize", e, !1), c.addEventListener("touchmove", e, !1), function () {
                c.removeEventListener("touchmove", e, !1), c.removeEventListener("resize", e, !1), c.removeEventListener("scroll", e, !1), b()
            }
        }(ae(function () {
            a.update()
        }, this._config.throttle)), this._started = !0), this._started
    }, Z.Strategy.EventStrategy.prototype.stop = function () {
        return this._started ? (this._removeEventListeners(), this._started = !1, !0) : !1
    }, P.VisMon = Z, P.PubSub = am, P.fn.monitor = function (a) {
        return new Z(this, a)
    }, P.Utils = {
        async: af,
        debounce: ag,
        defaults: U,
        defer: ak,
        extend: R,
        forEach: X,
        fireIf: aa,
        identity: M,
        isArray: S,
        isDefined: an,
        isElement: J,
        isFunction: ap,
        isObject: W,
        isPageVisible: V,
        isVisibleByStyling: ao,
        noop: ah,
        now: al,
        once: O,
        throttle: ae,
        percentage: N,
        VisibilityApi: aj(),
        createVisibilityApi: aj,
        _viewport: T,
        _isInViewport: ai,
        _isDisplayed: Q,
        _computedStyle: ac,
        _styleProperty: L
    }, P
});
(function (root) {
    var helper = {};
    helper.uuid = function () {
        return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
            var r = Math.random() * 16 | 0, v = c == "x" ? r : (r & 3 | 8);
            return v.toString(16)
        })
    };
    helper.getCookie = function (name) {
        var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
        if (arr = document.cookie.match(reg)) {
            return unescape(arr[2])
        } else {
            return null
        }
    };
    helper.setCookie = function (name, value, time) {
        var domain = document.domain;
        if (domain.endsWith(".com.cn")) {
            domain = domain.split(".").slice(-3).join(".")
        } else {
            domain = domain.split(".").slice(-2).join(".")
        }
        if (time) {
            var exp = new Date();
            exp.setTime(exp.getTime() + time);
            document.cookie = name + "=" + escape(value) + ";domain=" + domain + ";path=/;expires=" + exp.toUTCString()
        } else {
            document.cookie = name + "=" + escape(value) + ";domain=" + domain + ";path=/;"
        }
    };
    helper.getQueryString = function (name) {
        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
        var r = window.location.search.substr(1).match(reg);
        if (r != null) {
            return unescape(r[2])
        }
        return null
    };
    helper.addQueryString = function (e, n, t) {
        if (t == undefined || t == null) {
            t = ""
        }
        if (e.indexOf("?") != -1 || e.indexOf("=") != -1) {
            return e + "&" + n + "=" + t
        } else {
            return e + "?" + n + "=" + t
        }
    };
    helper.each = function (loopable, callback, self) {
        var additionalArgs = Array.prototype.slice.call(arguments, 3);
        if (loopable) {
            if (loopable.length === +loopable.length) {
                for (var i = 0; i < loopable.length; i++) {
                    callback.apply(self, [loopable[i], i].concat(additionalArgs))
                }
            } else {
                for (var item in loopable) {
                    callback.apply(self, [loopable[item], item].concat(additionalArgs))
                }
            }
        }
    };
    helper.extend = function (base) {
        helper.each(Array.prototype.slice.call(arguments, 1), function (extensionObject) {
            helper.each(extensionObject, function (value, key) {
                if (extensionObject.hasOwnProperty(key)) {
                    base[key] = value
                }
            })
        });
        return base
    };
    helper.indexOf = function (arrayToSearch, item) {
        if (Array.prototype.indexOf) {
            return arrayToSearch.indexOf(item)
        } else {
            for (var i = 0; i < arrayToSearch.length; i++) {
                if (arrayToSearch[i] === item) {
                    return i
                }
            }
            return -1
        }
    };
    helper.send = function (server, obj) {
        var protocol = window.location.protocol;
        obj.c_t = new Date().getTime();
        obj.u_a = "";
        var img = new Image(0, 0);
        img.src = protocol + server + "?" + helper.objectToQuery(obj)
    };
    helper.objectToQuery = function (jsonObj) {
        var args = "";
        for (var i in jsonObj) {
            if (args != "") {
                args += "&"
            }
            args += i + "=" + encodeURIComponent(jsonObj[i])
        }
        return args
    };
    helper.getXPath = function (element) {
        if (element == document.body) {
            return "/html/" + element.tagName.toLowerCase()
        }
        if (!element.parentNode) {
            return ""
        }
        var ix = 1, siblings = element.parentNode.childNodes;
        for (var i = 0, l = siblings.length; i < l; i++) {
            var sibling = siblings[i];
            if (sibling == element) {
                return helper.getXPath(element.parentNode) + "/" + element.tagName.toLowerCase() + "[" + (ix) + "]"
            } else {
                if (sibling.nodeType == 1 && sibling.tagName == element.tagName) {
                    ix++
                }
            }
        }
    };
    helper.getData = function (element) {
        if (element) {
            var data = element.getAttribute("_tracker_data_");
            if (data) {
                try {
                    data = eval("(" + data + ")");
                    data = helper.objectToQuery(data);
                    return data
                } catch (e) {
                    return data
                }
            }
        }
        return ""
    };
    helper.isChrome = function () {
        return window.navigator.userAgent.indexOf("Chrome") !== -1
    };
    helper.isWeixin = function () {
        return /micromessenger/i.test(navigator.userAgent)
    };
    helper.on = function (target, type, handler) {
        if (target.addEventListener) {
            target.addEventListener(type, handler, false)
        } else {
            target.attachEvent("on" + type, function (event) {
                return handler.call(target, setEvent)
            }, false)
        }
    };
    helper.onload = function (callback) {
        if (typeof window.addEventListener != "undefined") {
            window.addEventListener("load", callback, false)
        } else {
            if (typeof document.addEventListener != "undefined") {
                document.addEventListener("load", callback, false)
            } else {
                if (typeof window.attachEvent != "undefined") {
                    window.attachEvent("onload", callback)
                } else {
                    var _callback = window.onload;
                    if (typeof window.onload != "function") {
                        window.onload = callback
                    } else {
                        window.onload = function () {
                            _callback();
                            callback()
                        }
                    }
                }
            }
        }
    };
    helper.onunload = function (callback) {
        if (helper.isWeixin()) {
            if (typeof window.addEventListener != "undefined") {
                window.addEventListener("unload", callback, false)
            } else {
                if (typeof document.addEventListener != "undefined") {
                    document.addEventListener("unload", callback, false)
                } else {
                    if (typeof window.attachEvent != "undefined") {
                        window.attachEvent("onunload", callback)
                    } else {
                        var _callback = window.onunload;
                        if (typeof window.onunload != "function") {
                            window.onunload = callback
                        } else {
                            window.onunload = function () {
                                _callback();
                                callback()
                            }
                        }
                    }
                }
            }
        } else {
            if (typeof window.addEventListener != "undefined") {
                window.addEventListener("beforeunload", callback, false)
            } else {
                if (typeof document.addEventListener != "undefined") {
                    document.addEventListener("beforeunload", callback, false)
                } else {
                    if (typeof window.attachEvent != "undefined") {
                        window.attachEvent("onbeforeunload", callback)
                    } else {
                        var _callback = window.onbeforeunload;
                        if (typeof window.onbeforeunload != "function") {
                            window.onbeforeunload = callback
                        } else {
                            window.onbeforeunload = function () {
                                _callback();
                                callback()
                            }
                        }
                    }
                }
            }
        }
    };
    helper.getNetType = function () {
        var type = null;
        var ua = window.navigator.userAgent;
        if (/NetType/.test(ua)) {
            var types = ua.match(/NetType\/(\S*)/);
            if (types.length >= 1) {
                type = types[1]
            }
        }
        if (type == null) {
            var connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection || {type: "unknown"};
            type = connection.type || connection.effectiveType || "unknown"
        }
        return type.toLowerCase()
    };
    helper.getSocialNetworkingSite = function () {
        var ua = window.navigator.userAgent.toLowerCase();
        if (ua.match(/MicroMessenger/i) == "micromessenger") {
            var url = document.URL || "";
            var ref = document.referrer || "";
            if (ref.indexOf("http://mp.weixinbridge.com/mp/wapredirect?") == 0) {
                return "weixin-article"
            } else {
                if (url.indexOf("from=timeline") > 0) {
                    return "weixin-timeline"
                } else {
                    if (url.indexOf("from=singlemessage") > 0) {
                        return "weixin-singlemessage"
                    } else {
                        if (url.indexOf("from=groupmessage") > 0) {
                            return "weixin-groupmessage"
                        }
                    }
                }
            }
            return "weixin-unknown"
        }
        if (ua.match(/Weibo/i) == "weibo") {
            return "weibo"
        }
        if (ua.match(/QQ\//i) == "qq/") {
            return "qq"
        }
        if (ua.match(/qzone\//i) == "qzone/") {
            return "qzone"
        }
        if (ua.match(/tieba\//i) == "tieba/") {
            return "tieba"
        }
        if (ua.match(/momoWebView\//i) == "momowebview/") {
            return "momo"
        }
        if (ua.match(/douban/i) == "douban") {
            return "douban"
        }
        if (ua.match(/zhihu/i) == "zhihu") {
            return "zhihu"
        }
        if (ua.match(/AlipayClient\//i) == "alipayclient/") {
            return "alipay"
        }
        if (ua.match(/DingTalk\//i) == "dingtalk/") {
            return "dingtalk"
        }
        if (ua.match(/qdesk/i) == "qdesk") {
            return "qdesk"
        }
        if (ua.match(/qqnews\//i) == "qqnews/") {
            return "qqnews"
        }
        if (ua.match(/iqiyi/i) == "iqiyi") {
            return "iqiyi"
        }
        return "unknown"
    };
    helper.getTrackerData = function (key) {
        var tracker = window._tracker_ || [];
        for (var i = 0; i < tracker.length; i++) {
            var row = tracker[i];
            if (row && row.length && row.length >= 2) {
                if (key == row[0]) {
                    return row[1]
                }
            }
        }
        return null
    };
    helper.getSessionId = function () {
        return helper.getTrackerData("session_id") || helper.getCookie("_tracker_session_id_")
    };
    helper.getUserId = function () {
        return helper.getTrackerData("user_id") || helper.getCookie("_tracker_user_id_")
    };
    helper.getClientType = function () {
        return helper.getTrackerData("client_type") || ""
    };
    helper.getClientEdition = function () {
        return helper.getTrackerData("client_edition") || ""
    };
    helper.getProduct = function () {
        return helper.getTrackerData("product") || "tracker_view"
    };
    helper.getWxUserInfo = function () {
        return helper.getTrackerData("wx_user_info") || {}
    };
    helper.getWxReadFrom = function () {
        var ua = window.navigator.userAgent.toLowerCase();
        if (ua.match(/MicroMessenger/i) == "micromessenger") {
            var url = document.URL || "";
            var ref = document.referrer || "";
            if (ref.indexOf("http://mp.weixinbridge.com/mp/wapredirect?") == 0) {
                return "article"
            } else {
                if (url.indexOf("from=timeline") > 0) {
                    return "timeline"
                } else {
                    if (url.indexOf("from=singlemessage") > 0) {
                        return "singlemessage"
                    } else {
                        if (url.indexOf("from=groupmessage") > 0) {
                            return "groupmessage"
                        }
                    }
                }
            }
            return "unknown"
        }
        return ""
    };
    var collect = {
        time: new Date().getTime(),
        server: "//datalog.eqxiu.com/p.gif",
        pages: {time: 0, total: 1, curr: 0, depth: 1, ids: [], dur: [0]},
        triggers: {total: 0, id_type: [], counts: []},
        sdk: "tracker-view.js",
        ver: "1.1.1"
    };
    collect.params = function () {
        var p = {};
        p.sdk = collect.sdk;
        p.ver = collect.ver;
        p.d_i = helper.getCookie("_tracker_distinct_id_");
        if (document) {
            p.url = document.URL || "";
            p.tit = document.title || "";
            p.ref = document.referrer || ""
        }
        if (window && window.screen) {
        }
        if (navigator) {
            p.u_a = navigator.userAgent || ""
        }
        if (window && window.location.host) {
        }
        var device = tracker_ua_device(p.u_a);
        if (device && device.browser) {
            p.bro = device.browser.name || ""
        }
        if (device && device.os) {
            p.os = device.os.name || "";
            if (device.os.version) {
                p.o_v = device.os.version.original || ""
            }
        }
        if (device && device.engine) {
            p.eng = device.engine.name || ""
        }
        if (device && device.device) {
            p.man = device.device.manufacturer || "";
            p.mod = device.device.model || ""
        }
        p.sns = helper.getSocialNetworkingSite();
        p.n_t = helper.getNetType();
        p.s_i = helper.getSessionId();
        p.u_i = helper.getUserId();
        p.c_p = helper.getClientType();
        p.c_e = helper.getClientEdition();
        p.product = helper.getProduct();
        var wxUserInfo = helper.getWxUserInfo();
        p.wx_o_i = wxUserInfo.openid || "";
        p.wx_n_n = wxUserInfo.nickname || "";
        p.wx_sex = wxUserInfo.sex || "";
        p.wx_pro = wxUserInfo.province || "";
        p.wx_cit = wxUserInfo.city || "";
        p.wx_cou = wxUserInfo.country || "";
        p.wx_hea = wxUserInfo.headimgurl || "";
        p.wx_u_i = wxUserInfo.unionid || "";
        p.wx_r_f = helper.getWxReadFrom();
        p.scene_id = window.scene && window.scene.id || "";
        p.scene_code = window.scene && window.scene.code || "";
        p.scene_bizType = window.scene && window.scene.bizType;
        p.scene_property_eqAdType = window.scene && window.scene.property && window.scene.property.eqAdType;
        p.scene_ext_yqc_ad = window.scene && window.scene.ext && window.scene.ext.yqc && window.scene.ext.yqc.ad;
        p.scene_member_type = window.scene && window.scene.memberType;
        p.scene_user_type = window.scene && window.scene.userType;
        p.foto_id = window.zjxInfo && window.zjxInfo.id || "";
        p.foto_code = window.zjxInfo && window.zjxInfo.code || "";
        return p
    };
    collect.addElementClickListener = function () {
        var that = this;
        var nodeList = document.querySelectorAll("div, span, a, img, button, input[type='button'], input[type='submit'], input[type='reset'], *[_tracker_data_]");
        helper.each(nodeList, function (element, index) {
            if ((element && element.tagName.toLowerCase() == "div" || element.tagName.toLowerCase() == "span")) {
                var id = element.getAttribute("id") || "";
                var clz = element.getAttribute("class") || "";
                var tracker_data = element.getAttribute("_tracker_data_") || "";
                if (tracker_data == "" && id.indexOf("btn") < 0 && id.indexOf("button") < 0 && clz.indexOf("btn") < 0 && clz.indexOf("button") < 0) {
                    return
                }
            }
            if (!element.getAttribute("_tracker_click_")) {
                helper.on(element, "click", function (event) {
                    var params = that.params();
                    params.e_t = "element_click";
                    params.e_p = helper.getXPath(element);
                    params.e_d = helper.getData(element);
                    params.scene_page_total = that.pages.total;
                    params.scene_page_curr = that.pages.curr;
                    var e = event || window.event;
                    helper.send(that.server, params);
                    return false
                });
                element.setAttribute("_tracker_click_", "_tracker_click_")
            }
        })
    };
    collect.addScenePageViewListener = function () {
        var that = this;
        var nodeList = document.querySelectorAll("section.main-page div.m-img");
        that.pages.total = nodeList.length;
        helper.each(nodeList, function (element, index) {
            if (!element.getAttribute("_tracker_view_")) {
                var pageId = 0;
                try {
                    pageId = element.firstElementChild.getAttribute("data-scene-id")
                } catch (e) {
                }
                if (pageId == "") {
                    pageId = 0
                }
                if (index < that.pages.dur.length) {
                    that.pages.dur[index] = 0;
                    that.pages.ids[index] = pageId
                } else {
                    that.pages.dur.push(0);
                    that.pages.ids.push(pageId)
                }
                var visibility = VisSense(element, {fullyvisible: 1});
                var visibility_monitor = visibility.monitor({
                    fullyvisible: function (visibility_monitor) {
                        that.pages.curr = index;
                        if (that.pages.curr + 1 > that.pages.depth) {
                            that.pages.depth = that.pages.curr + 1
                        }
                        that.pages.time = new Date().getTime()
                    }, hidden: function () {
                        if (that.pages.time > 0) {
                            that.pages.dur[index] += new Date().getTime() - that.pages.time
                        }
                    }
                }).start();
                element.setAttribute("_tracker_view_", "_tracker_view_")
            }
        })
    };
    collect.launch = function () {
        var that = this;
        var params = that.params();
        params.e_t = "launch";
        helper.send(that.server, params)
    };
    collect.pageView = function () {
        var that = this;
        that.pages.total = document.querySelectorAll("section.main-page div.m-img").length;
        var params = that.params();
        params.e_t = "page_view";
        params.scene_page_total = that.pages.total;
        helper.send(that.server, params)
    };
    collect.pageLeave = function () {
        var that = this;
        if (that.pages.total == 0) {
            return
        }
        if (that.pages.time > 0) {
            that.pages.dur[that.pages.curr] += new Date().getTime() - that.pages.time
        }
        var params = that.params();
        params.e_t = "page_leave";
        params.dur = new Date().getTime() - that.time;
        params.scene_page_total = that.pages.total;
        params.scene_page_curr = that.pages.curr;
        params.scene_page_depth = that.pages.depth;
        params.scene_page_dura = that.pages.dur.join(",");
        params.scene_page_ids = that.pages.ids.join(",");
        params.scene_trigger_total = that.triggers.total;
        var trigger_counts = [];
        for (var i = 0; i < that.triggers.id_type.length; i++) {
            trigger_counts.push(that.triggers.id_type[i] + "," + that.triggers.counts[i])
        }
        params.scene_trigger_counts = trigger_counts.join(";");
        helper.send(that.server, params);
        delete this
    };
    collect.getShareUrl = function (e) {
        var that = this;
        var n = e;
        try {
            var t = "";
            if (e.indexOf("#") != -1) {
                t = e.split("#")[1];
                e = e.split("#")[0]
            }
            var share_level = parseInt(helper.getCookie("_tracker_share_level_"));
            if (e.indexOf("share_level=") != -1) {
                e = e.replace("share_level=" + share_level, "share_level=" + (share_level + 1))
            } else {
                e = helper.addQueryString(e, "share_level", 1)
            }
            var from_user = helper.getCookie("_tracker_from_user_");
            if (e.indexOf("from_user=") != -1) {
                e = e.replace("from_user=" + from_user, "from_user=" + helper.getCookie("_tracker_distinct_id_"))
            } else {
                e = helper.addQueryString(e, "from_user", helper.getCookie("_tracker_distinct_id_"))
            }
            var from_id = helper.getCookie("_tracker_from_id_");
            var share_id = helper.uuid();
            helper.setCookie("_tracker_share_id_", share_id);
            if (e.indexOf("from_id") != -1) {
                e = e.replace("from_id=" + from_id, "from_id=" + share_id)
            } else {
                e = helper.addQueryString(e, "from_id", share_id)
            }
            var share_time = new Date().getTime();
            helper.setCookie("_tracker_share_time_", share_time);
            if (e.indexOf("share_time=") != -1) {
                e = e.replace(/share_time=[a-zA-Z0-9-]{13}/, "share_time=" + share_time)
            } else {
                e = helper.addQueryString(e, "share_time", share_time)
            }
            if (t != "") {
                e += "#" + t
            }
            return e
        } catch (i) {
            return n
        }
    };
    collect.share = function (to) {
        var that = this;
        var params = that.params();
        if (to == "weibo") {
            to = "unknown"
        }
        params.e_t = "share";
        params.from_user = helper.getCookie("_tracker_from_user_") || "";
        params.share_user = helper.getCookie("_tracker_distinct_id_") || "";
        params.from_id = helper.getCookie("_tracker_from_id_") || "";
        params.share_id = helper.getCookie("_tracker_share_id_") || "";
        params.share_to = to || "unknown";
        params.share_level = (parseInt(helper.getCookie("_tracker_share_level_")) + 1) || 1;
        params.share_time = helper.getCookie("_tracker_share_time_") || "";
        helper.send(that.server, params)
    };
    collect.trigger = function (id, type) {
        var that = this;
        if (!id || !type) {
            return
        }
        that.triggers.total += 1;
        var key = id + "," + type;
        var index = that.triggers.id_type.indexOf(key);
        if (index < 0) {
            that.triggers.id_type.push(key);
            that.triggers.counts.push(1)
        } else {
            that.triggers.counts[index] += 1
        }
    };
    collect.adView = function (customParams) {
        var that = this;
        that.time = new Date().getTime();
        var params = that.params();
        params.e_t = "ad_view";
        if (customParams) {
            params = helper.extend(params, customParams)
        }
        helper.send(that.server, params)
    };
    collect.adClick = function (customParams) {
        var that = this;
        that.time = new Date().getTime();
        var params = that.params();
        params.e_t = "ad_click";
        if (customParams) {
            params = helper.extend(params, customParams)
        }
        helper.send(that.server, params)
    };
    helper.onload(function () {
        try {
            var _tracker_distinct_id_ = helper.getCookie("_tracker_distinct_id_");
            if (_tracker_distinct_id_ == null) {
                _tracker_distinct_id_ = helper.uuid();
                helper.setCookie("_tracker_distinct_id_", _tracker_distinct_id_, 100 * 365 * 24 * 60 * 60 * 1000)
            }
            var _tracker_launch_ = helper.getCookie("_tracker_launch_");
            if (_tracker_launch_ == null) {
                collect.launch();
                _tracker_launch_ = "1";
                if (helper.isChrome()) {
                    helper.setCookie("_tracker_launch_", _tracker_launch_, 24 * 60 * 60 * 1000)
                } else {
                    helper.setCookie("_tracker_launch_", _tracker_launch_)
                }
            }
            var _tracker_session_id_ = helper.getCookie("JSESSIONID") || helper.getCookie("_tracker_session_id_") || helper.uuid();
            if (helper.isChrome()) {
                helper.setCookie("_tracker_session_id_", _tracker_session_id_, 24 * 60 * 60 * 1000)
            } else {
                helper.setCookie("_tracker_session_id_", _tracker_session_id_)
            }
            var _tracker_user_id_ = null;
            if (window.localStorage) {
                var userInfo = window.localStorage.getItem("userLabel.showInfo");
                if (userInfo) {
                    if (typeof(userInfo) != "object") {
                        userInfo = eval("(" + userInfo + ")")
                    }
                    if (typeof(userInfo) == "object") {
                        for (var p in userInfo) {
                            if (p.length == "ff8080815a4a077a015a5a90c2430000".length) {
                                _tracker_user_id_ = p;
                                break
                            }
                        }
                    }
                }
            }
            _tracker_user_id_ = _tracker_user_id_ || helper.getCookie("_tracker_user_id_") || "";
            if (helper.isChrome()) {
                helper.setCookie("_tracker_user_id_", _tracker_user_id_, 24 * 60 * 60 * 1000)
            } else {
                helper.setCookie("_tracker_user_id_", _tracker_user_id_)
            }
            var share_level = helper.getQueryString("share_level") || 0;
            try {
                share_level = parseInt(share_level)
            } catch (e) {
                share_level = 0
            }
            helper.setCookie("_tracker_share_level_", share_level);
            var from_user = helper.getQueryString("from_user") || "";
            helper.setCookie("_tracker_from_user_", from_user);
            var from_id = helper.getQueryString("from_id") || "";
            helper.setCookie("_tracker_from_id_", from_id);
            collect.addElementClickListener();
            collect.addScenePageViewListener();
            if (window.scene) {
                setTimeout(function () {
                    collect.pageView()
                }, 1500)
            } else {
                collect.pageView()
            }
            collect.time = new Date().getTime()
        } catch (e) {
            console.error(e)
        }
    });
    helper.onunload(function () {
        try {
            collect.pageLeave()
        } catch (e) {
            console.error(e)
        }
    });
    helper.on(document, "DOMNodeInserted", function (e) {
        try {
            collect.addElementClickListener();
            collect.addScenePageViewListener()
        } catch (e) {
            console.error(e)
        }
    });
    window._tracker_api_ = collect
})(window);
